需要快速的C++ Qt/Qwt散点图绘制

11

我有一个超大的2D点阵列(大约有300万个点对),需要在基于Qt的应用程序中以合理的速度进行渲染。

我尝试使用QGraphicsScene,但即使在处理40万个基本元素时也非常缓慢,因此我转而寻找qwt库。

它在其sourceforge页面上有一个散点图示例截图,看起来正是我所需要的,但我无法找到可以用于这些数据的任何实际代码,也找不到qwt文档中相应的API - 它只提到了不同类型的曲线。

因此,最好能够得到一些散点图示例的指针和性能方面的建议。 欢迎提供其他能够处理这么多数据的C ++ qt兼容绘图库的建议。

4个回答

16

散点图包含在"realtime"示例中:您需要的是IncrementalPlot类。 我建议不要绘制全部三百万个点,因为现代屏幕只有大约两百万像素 :) 因此,在绘制散点图之前最好通过将相邻的点合并成一个点来简化图形,其阈值取决于缩放因子。


哈哈,200万像素上的300万点是...密度图;-) - rubenvb
@rubenvb:虽然我们仍然可以通过将RGB组件视为独立的点来将分辨率增加三倍! :D - vines
IncrementalPlot中使用的方法证明足够快,谢谢。 "散点图"是基于没有线条的PlotCurve,这并不是很明显。 - Daniel Kluev

6

正如viens所指出的那样,生成300万个点的散点图可能不是一个好主意。

我已经成功地使用OpenGL生成了3D散点图,其中包含3万个点。 OpenGL速度快,并且与Qt集成良好。但是,它是一个低级API,需要你做很多繁琐的编码工作。

VTK可能是另一个选择。


3

MathGL 是一款免费(GPL)的跨平台绘图库。它是使用 C++ 编写的,并拥有 Qt 窗口部件。此外,它还相当快速,但如果要绘制 300 万个点......在我的笔记本电脑上需要大约 30 秒。


2
你可以像 @vines 所说的那样使用OpenGL,特别是利用显示列表 glGenList 或顶点缓冲区。几百万个点作为原始顶点不应该很困难。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接