首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VisPy中高效地绘制多条直线

在VisPy中高效地绘制多条直线
EN

Stack Overflow用户
提问于 2016-01-20 02:26:33
回答 1查看 1.6K关注 0票数 2

从我在VisPy库中看到的所有示例代码/演示中,我只看到人们绘制多条线的一种方法,例如:

代码语言:javascript
复制
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。)

EN

回答 1

Stack Overflow用户

发布于 2016-08-31 06:59:56

您应该将数组传递给Line()函数的"connect“参数。

代码语言:javascript
复制
    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行的限制更大。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34884302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档