2

从我在 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。)

4

1 回答 1

1

您应该将数组传递给 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)

您只需将一个对象添加到您的画布,但控制梨线更加有限。

于 2016-08-30T22:59:56.153 回答