2013-04-23 188 views
2

我試圖開發一個遙測系統,該系統從Arduino發送傳感器數據,並實時繪製出來。爲此,我使用Python和matplotlib庫。 我的問題是,每當新的數據點到達時,我想通過將其繪製到與其他數據點相同的圖中來添加該數據點。到目前爲止,我找不到解決方案。matplotlib,在圖中繪製多個圖/點

+2

使用'set_data'。參見例子[this mpl example](http://matplotlib.org/dev/examples/animation/bayes_update.html);它使用動畫,但是數據是來自動畫還是傳感器在這種情況下無關緊要。 – Evert 2013-04-23 13:05:18

+0

不幸的是,Matlab沒有與Mathematica中的動態函數等效。 – 2013-04-25 21:38:02

+0

所以,我已經嘗試了Evert發送給我的set_data函數。這很有用,但是它仍然有點慢,爲自己繪製每個新的數據點。我接收約5-10赫茲的新數據點,所以調用draw()會產生瓶頸。我現在的解決方案是始終收集10個數據點並將它們組合在一起。 – user2251084 2013-05-02 09:07:43

回答

-1

據我所看到的,你有這樣做的幾種不同的方式(我會在這個我認爲越來越多的困難

  1. 製作的位圖文件,如巴紐,其中有列出它們每次新數據點到達時都要重新生成,要做到這一點,你需要將舊數據存儲在文件或數據庫中的某個地方。
  2. 在瀏覽器中使用svg,然後使用javascript添加點或線。 http://sickel.net/blogg/?p=1506
  3. 製作位圖,存儲並編輯它以添加新的點 - 如果您要「將舊點關閉「,或者在更多數據到達時重新縮放圖像。
  4. 製作一系列位圖,並將總圖作爲很多切片的組合。 - 在這裏,您可以輕鬆「滾出」舊點,但如果您想重新調整,則運氣不佳。
+0

3.和4.似乎更多的是實驗... – 2013-04-23 12:47:49

+1

這是非常複雜的。您可以簡單地重疊繪製當前座標軸,或使用'set_data'更新數據。 svg/javascript不在任何地方,它是matplotlib。位圖可能也不適用:它聽起來像生成(矢量)圖,而不是位圖。 – Evert 2013-04-23 13:07:09

1

您可以用Arduino API在Plotly中將數據從Arduino流式傳輸到Plotly圖形中。你有兩種選擇:不斷傳輸數據(這聽起來像你想要做的),或傳輸一個塊。

如果刷新頁面,它會每隔幾秒更新一次圖表。

Arduino API可用here。而且,如果您已經在使用Python,則可以使用extend選項將數據更新到另一個圖中。 Python API是here

下面是它看起來如何從一個Arduino發送一個例子,你可以看到交互式版本here

enter image description here

全面披露:我在Plotly工作。