繁体   English   中英

如何有效地使用QCustomPlot绘制大型时间序列?

[英]How to plot large time series with QCustomPlot efficiently?

我目前正在使用QCustomPlot在Qt中绘制数字信号,但似乎当样本数大于10000000时,操作变得非常慢。 我有一个time向量和一个data向量,我正在设置这样的数据:

QCustomPlot *plot;
QCPGraph *graph;
graph->setData(time, data); 

有机会提高效率吗?

因为QCustomPlot在内部使用QCPDataMap (它是QMap<double, QCPData>typedef QMap<double, QCPData> ),这意味着它使用地图来存储按x坐标(键)排序的实际数据。 不幸的是, QCPGraph::setData(const QVector<double> &x, const QVector<double> &y)方法没有利用样本可以订购并且不使用插入提示的事实,因此这显着改善了结果:

QCPDataMap *data = new QCPDataMap();
size_t len = x.size();
auto xp = std::begin(x);
auto yp = std::begin(y);
while (len--)
    data->insertMulti(data->constEnd(), *xp, QCPData(*xp++, *yp++)); 
graph->setData(data);

我不认为std::map s或QMap是在X,Y图上存储样本的最佳结构,因为对地图中的每个条目都进行了新的分配和释放,我们正在讨论数百万个。 QCustomPlot应该使用自定义分配器实现自定义映射类,以避免这些内存问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM