2016-01-19 60 views
2

從所有的示例代碼/演示我在VisPy庫中所看到的,我只看到一個方式,人們繪製多行,例如:有效地繪製多條線路在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。)

回答

1

你應該傳遞一個數組到線()函數的「連接」參數。

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) 

您只添加一個對象到您的畫布,但對照梨線更受限制。