簡體   English   中英

如何加快pyqtgraph中的實時繪圖

[英]How to speed up real time plotting in pyqtgraph

簡而言之,我試圖找到一種更快的方法來繪制通過串行輸入的實時數據。 數據看起來像座標(x,y),每秒大約有40個。 流將數據存儲在數組中,使用x作為索引並將y設置為其值。 這部分正在穿線。 盡管流可以立即讀取數據,但是pyqtgraph庫無法跟上這種速度。

這是我繪制數據的代碼部分。 distance和theta變量是具有6400個索引的數組。 它們已轉換為極坐標值,並在每次迭代時進行繪制。 我在此處添加了一個延遲,以幫助保持實時性,盡管這只是一個臨時解決方案。

while True:
    x = distances * np.cos(theta)
    y = distances * np.sin(theta)
    plot.plot(x, y, pen=None, symbol='o', clear=True)
    pg.QtGui.QApplication.processEvents()


    #sleep(0.025)

雖然按照我的預期進行,但無法繪制來自串行輸入的最新數據。 與最近的讀取相比,它容易落后幾秒鍾,可能是因為它無法每1/40秒繪制6400點。 我想知道是否有辦法只更新1點,而不必每次在pyqtgraph中重新繪制整個散點圖。

可以基於點進行繪制,但是如果是這樣,是否有辦法跟蹤每個單獨的點? 不應存在​​共享相同角度值且具有不同距離的點,並且實質上應將其覆蓋。

我也想知道是否還有其他圖形動畫庫可能是值得考慮的解決方案。

如果您想知道,這是它的外觀:

在此處輸入圖片說明

線程允許您始終具有可用於繪制的數據,但是由於每次繪制迭代的paintEvent延遲,繪制速度都會受到瓶頸的影響。 據我了解,沒有辦法使用setData更新每個繪畫事件1點,而不必為每次迭代重新繪制整個數據集。 因此,如果您有6400,則即使要用1個額外的點來更新公正數據,也必須重新繪制所有點。

可能的解決方法包括對數據進行下采樣或每X個數據點僅繪制一次。 本質上,您可以在屏幕上繪制數據的速度受到限制,但您可以更改數據集以顯示最相關的信息,而無需刷新屏幕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM