簡體   English   中英

如何使用 QtCharts 繪制非連續時間序列軸?

[英]How to plot non-consecutive time-series axis with QtCharts?

我需要繪制一個圖表,其軸 X 的數據類型為date-time

我正在嘗試使用QtCharts來執行此操作,但我發現QtCharts::QDateTimeAxis只能處理連續數據(X 軸是成比例且連續的)。

例如,給定一個 LineSeries:

{
   { "20:15:00", 123.0 },
   { "20:15:01", 124.0 },
   { "21:00:00", 125.0 },
   { "21:00:01", 126.0 },
}

如果我使用QDateTimeAxis作為 X 軸,我會在 X 軸上獲得更多的空白范圍,而不僅僅是 4 個點。

即使“20:15:02”到“20:59::59”之間沒有數據, QChart還是給出了很多X軸沒有意義的槽位的空間。

我們可以用Qt繪制一個具有非連續 X 軸的圖表嗎?

如果Qt做不到,是否有開源 C++ 庫可以做到這一點?

您不必使用 QDateTimeAxis,因為該軸的設計使點的間隔與時間差成比例。 因此,一種可能的解決方案是使用 QCategoryAxis:

#include <QtWidgets>
#include <QtCharts>

QT_CHARTS_USE_NAMESPACE

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    std::vector<std::pair<QString, float>> data = {
        { "20:15:00", 123.0 },
        { "20:15:01", 124.0 },
        { "21:00:00", 125.0 },
        { "21:00:01", 126.0 },
    };

    QScatterSeries *series = new QScatterSeries(); // or QLineSeries *series = new QLineSeries;
    QCategoryAxis *axisX = new QCategoryAxis;
    axisX->setMin(.5);
    axisX->setMax(data.size() + .5);
    axisX->setTitleText("Time");
    QValueAxis *axisY = new QValueAxis;
    axisY->setLabelFormat("%.2f");
    axisY->setTitleText("Example");
    axisY->setMin(122);
    axisY->setMax(127);

    for(std::size_t i=0; i < data.size(); i++){
        series->append(i + 1, data.at(i).second);
        axisX->append(data.at(i).first, i + 1.5);
    }

    QChart *chart = new QChart();
    chart->addSeries(series);

    chart->legend()->hide();
    chart->addAxis(axisX, Qt::AlignBottom);

    series->attachAxis(axisX);
    chart->addAxis(axisY, Qt::AlignLeft);
    series->attachAxis(axisY);

    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(820, 600);
    window.show();
    return a.exec();
}

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM