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

2024-03-26

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

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

有机会提高效率吗?


因为 QCustomPlot 在内部使用QCPDataMap(这是一个typedef of 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::maps or QMaps 是在 X,Y 图上存储样本的最佳结构,因为映射中的每个条目都会进行新的分配和释放,而我们正在讨论数百万个条目。 QCustomPlot 应该使用自定义分配器实现自定义地图类,以避免这些内存问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 QCustomPlot 高效地绘制大型时间序列? 的相关文章

随机推荐