作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要绘制一个图表,其 X 轴的数据类型为日期-时间
。
我尝试使用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();
}
关于c++ - 如何用QtCharts绘制非连续的时间序列轴?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59706228/
我是一名优秀的程序员,十分优秀!