从我在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会更慢(当你有数百万点时,速度就会提高)。
根本原因在于绘制线条的方式。创建绘图窗口小部件然后绘制线条时,每条线都会渲染到画布上。在matplotlib中,您可以明确声明在所有行都在内存中绘制之前不显示画布,但在VisPy中似乎没有相同的功能,使其无用。
这有什么办法吗?我需要绘制多行,以便我可以交互式地更改属性,因此将所有数据点展平为一个绘图调用无法工作。
(我正在使用PyQt4将绘图嵌入到GUI中。我也考虑了pyqtgraph。)
答案 0 :(得分:1)
您应该将数组传递给" connect" Line()函数的参数。
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)
您只需向画布添加一个对象,但控制梨线更受限制。