用Python绘制10,000+点的三维散点图(并且渲染速度快)

8

就性能而言,当我在 mayavi 中绘图时,以下代码片段对我来说完全正常。

import numpy as np
from mayavi import mlab

n = 5000
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)
s = np.sin(x)**2 + np.cos(y)

mlab.points3d(x, y, z, s, colormap="RdYlBu", scale_factor=0.02, scale_mode='none')

但是当 n >= 10000 时,mayavi 开始变得不稳定。同样地,在数据集达到此规模时,在 matplotlib 中进行三维绘图(Axes3D.scatter)也会遇到类似困难(这就是我首先研究 mayavi 的原因)。
首先,是否有我错过的 mayavi 中的某些(微小或重大)内容,可以使渲染10,000多个点的散点图更容易?
其次,如果上面的答案是否定的,那么我还有哪些选项(无论是在 mayavi 中还是在其他Python软件包中),可以绘制如此巨大的数据集?
我标记了ParaView,只是为了说明用ParaView渲染我的数据是非常顺畅的,这让我相信我没有尝试做任何不合理的事情。
更新:
将模式指定为2D图形可以大大提高速度。例如:
mlab.points3d(x, y, z, s, colormap="RdYlBu", scale_factor=0.02,
              scale_mode='none', mode='2dcross')

可以轻松支持高达100,000个点。

在此输入图像描述

如果有人能添加一些关于如何加速渲染3D字形的信息,那就太好了。

1个回答

5

PyQtGraph是一个更高性能的绘图包,虽然不如matplotlib或mayavi那么“美观”。它专门用于数值计算,因此可以轻松地渲染数万个点。

至于mayavimatplotlib:我认为你已经达到了这些包所能处理的点数上限。

编辑:VisPy似乎是PyQtGraph和其他可视化包的继承者。可能有点过头了,但它可以通过将计算卸载到GPU来轻松显示几十万个点。


感谢您重新关注这个问题!虽然VisPy似乎是一个非常强大的可视化包,但乍一看它的API比我用过的Python包更复杂,而且它似乎特别适用于动态绘图/渲染。无论如何,我会在接下来的几天里看看它是否适合我的需求,谢谢! - lanery

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