需要快速 c++ qt/qwt 散点图

Posted

技术标签:

【中文标题】需要快速 c++ qt/qwt 散点图【英文标题】:Need fast c++ qt/qwt scatter plot 【发布时间】:2011-07-07 13:50:43 【问题描述】:

我有巨大的 - 大约 300 万对 - 二维点数组,我需要在基于 Qt 的应用程序中以合理的速度进行渲染。

我尝试过使用 QGraphicsScene,但即使在 400000 个基元上它也很慢,所以我改用 qwt 库。

它的 sf 页面上有 scatter plot example screenshot,看起来正是我需要的,但我既找不到任何可用于此数据的实际代码,也找不到 qwt 文档中的 API - 它只提到不同曲线类型。

因此,最好获得一些关于散点图示例的指针和一些关于其性能的建议。 也欢迎其他可以处理这种数据量的 c++ qt 兼容绘图库的建议。

【问题讨论】:

【参考方案1】:

散点图包含在 "realtime" 示例中:您想要的是 IncrementalPlot 类。 我还建议绘制所有 300 万个点是不合理的,因为现代屏幕只有大约 200 万个像素:) 因此,通过将相邻点合并为一个阈值取决于缩放系数。

【讨论】:

哈哈,200 万像素上的 300 万个点是……密度图;-) @rubenvb:尽管我们仍然可以通过将 RGB 分量计算为单独的点来使分辨率增加三倍! :D IncrementalPlot 中使用的方法证明足够快,谢谢。 “散点图”基于没有线条的 PlotCurve 并不是很明显。【参考方案2】:

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

使用 OpenGL 生成具有 30.000 个点的 3D 散点图时,我取得了良好的性能。 OpenGL 速度很快,并且与 Qt 集成得很好。但是,它是一个低级 API,迫使您进行大量繁琐的编码。

VTK 可能是另一种选择。

【讨论】:

【参考方案3】:

MathGL 是免费 (GPL) 跨平台绘图库。它是用 C++ 编写的,并且有 Qt 小部件。它也相当快,但有 300 万个点……在我的笔记本电脑上绘图大约需要 30 秒。

【讨论】:

【参考方案4】:

您建议使用 OpenGL,正如 @vines 所说,特别是利用或显示列表 glGenList 或顶点缓冲区。几百万个点作为图元顶点应该不难。

【讨论】:

以上是关于需要快速 c++ qt/qwt 散点图的主要内容,如果未能解决你的问题,请参考以下文章

100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图三维散点图散点图矩阵)

R语言可视化:散点图散点图和折线图(line charts)3D散点图旋转3D散点图气泡图corrgram包可视化相关性矩阵马赛克图( Mosaic plots)hexbin密度图

R数据可视化初阶-散点图散点图矩阵相关系数

可视化实验十:利用Python绘制棒图散点图

可视化实验十:利用Python绘制棒图散点图

Excel中如何正确地画XY散点图