从我在VisPy库中看到的所有示例代码/演示中,我只看到人们绘制多条线的一种方法,例如:
for i in range(N):
pos = pos.copy()
pos[:, 1] = np.random.normal(scale=5, loc=(i+1)*30, size=N)
line = scene.visuals.Line(pos=pos, color=color, parent=canvas.scene)
lines.append(line)
canvas.show()我的问题是我有很多线要画(每条线都有几十万个点)。Matplotlib被证明太慢了,因为绘制的点的总数是数百万,因此我切换到了VisPy。但是,当你绘制成千上万条线,每条线都有几千个点时,VisPy就更慢了(当你有几百万个点时,速度就会加快)。
根本原因在于划线的方式。当您创建一个plot小部件,然后绘制一条线时,每一条线都会呈现到画布上。在matplotlib中,您可以显式声明在内存中绘制所有线条之前不显示画布,但在VisPy中似乎没有相同的功能,这使得它无用。
有什么办法可以解决这个问题吗?我需要绘制多条线,以便可以交互地更改属性,因此将所有数据点展平为一个绘图调用将不起作用。
(我使用PyQt4将绘图嵌入到图形用户界面中。我也考虑过pyqtgraph。)
发布于 2016-08-31 06:59:56
您应该将数组传递给Line()函数的"connect“参数。
xy = np.random.rand(5,2) # 2D positions
# Create an array of point connections :
toconnect = np.array([[0,1], [0,2], [1,4], [2,3], [2,4]])
# Point 0 in your xy will be connected with 1 and 2, point
# 1 with 4 and point 2 with 3 and 4.
line = scene.visuals.Line(pos=xy, connect=toconnect)您只在画布上添加了一个对象,但控制pear行的限制更大。
https://stackoverflow.com/questions/34884302
复制相似问题