需要快速 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密度图