QCustomPlot系列


先看兩個小知識:
1、顯示數據散點:ui->customPlot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));//散點

2、連接散點的方式:customPlot->graph(0)->setLineStyle(QCPGraph::lsStepLeft);
有好幾種:折線連接、左端點階梯連接、右端點階梯連接等。

 

 

QCustomPlot支持以數值、日期、時間做X軸。

數值就不說了,只講一下:1、日期,2、時間

1、日期做X軸,可以顯示出:年-月-日-時-分-秒-毫秒, 

X軸的數據以1970-01-01 00:00:00至當前時間的總秒數,關於“總秒數”可參考:qint64 QDateTime::currentSecsSinceEpoch()。
如果想在X軸顯示出毫秒數,那么只能把X值用到小數位,可以用 “總毫秒數”:qint64  QDateTime::currentMSecsSinceEpoch() 除以1000.0f來設置X值。

例如:

若某個點的X值=0,則該點在圖中的X坐標會顯示為1970-01-01 00:00:00
若某個點的X值=5,則該點在圖中的X坐標會顯示為1970-01-01 00:00:05
若某個點的X值=3601,則該點在圖中的X坐標會顯示為1970-01-01 01:00:01   (3601秒為1個小時零1秒)
若某個點的X值=1596415566,則該點在圖中的X坐標會顯示為2020-08-03 08:46:06

示例:

QVector<double> time(200), value(200);
 
for(int i = 0; i < time.count(); i++)
 
{
 
time[i] = QDateTime::currentSecsSinceEpoch() + i;//方法1:以此刻的時間做X軸(總秒數),一秒一個值
 
//time[i] = QDateTime::currentMsecsSinceEpoch() / 1000.0 + i;//方法2
 
value[i] = qrand() % 10 - 5;//[-5, 5]隨機數做y值
 
}//生成模擬數據
 
 
 
ui->customPlot_2->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);//添加鼠標拖放支持、滾輪縮放支持
 
ui->customPlot_2->addGraph();
 
ui->customPlot_2->graph(0)->setData(time, value);//設置數據源
 
ui->customPlot_2->graph(0)->rescaleAxes();
 
 
 
QSharedPointer<QCPAxisTickerDateTime> dateTicker(new QCPAxisTickerDateTime);//日期做X軸
 
dateTicker->setDateTimeFormat("yy-MM-dd hh:mm:ss");//日期格式(可參考QDateTime::fromString()函數)
 
ui->customPlot_2->xAxis->setTicker(dateTicker);//設置X軸為時間軸

 

 

 

 

2、時間做X軸

時間做X軸可以顯示:日-時-分-秒-毫秒,舉幾個例子:
X值為0時,代表第0天0時0分0秒0毫秒,
X值為1時,代表第0天0時0分1秒0毫秒
X值為2.389時,代表第0天0時0分2秒389毫秒
X值為3601時,代表第0天1時0分1秒0毫秒
以此類推。

 
#pragma execution_character_set("utf-8")//避免中文亂碼
 
 
 
QVector<double> time(20), value(20);
 
for(int i = 0; i < time.count(); i++)
 
{
 
time[i] = 3600 * 24 * 3 + 3600 * 2 + i * 0.1;//模擬從第3天2點整開始,每100ms一個數
 
value[i] = qrand() % 10 - 5;
 
}
 
ui->customPlot_2->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
 
 
 
ui->customPlot_2->addGraph();
 
ui->customPlot_2->graph(0)->setData(time, value);
 
ui->customPlot_2->graph(0)->rescaleAxes();
 
ui->customPlot_2->graph(0)->setLineStyle(QCPGraph::lsStepLeft);//左端點階梯線樣式
 
ui->customPlot_2->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));//顯示散點
 
 
 
QSharedPointer<QCPAxisTickerTime> dateTicker(new QCPAxisTickerTime);
 
dateTicker->setTimeFormat("%h:%m:%s.%z\n第%d天");//時間格式,參考本函數的幫助文檔
 
ui->customPlot_2->xAxis->setTicker(dateTicker);

 

 

 https://blog.csdn.net/qq_31073871/article/details/90111092


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM