2017-01-05 22 views
1

我必須實時讀取「file.txt」中的數字(另一個程序會保存一對數字並每1/10秒覆蓋它們)。下面的腳本可以繪製數字,但只有當我啓動劇情時讀取的那對。我嘗試了plt.ion(),但在這種情況下它不做任何事情。每次更新「file.txt」時,我都想閱讀。使用'plotfile'方法的Python活圖

我使用的代碼是:

import matplotlib.pyplot as plt 

plot.plotfile('file.txt', delimiter=' ', cols=(1, 0), 
       names=('Volume', 'Tempo'), marker='o') 
plt.show() 

在現場的情況下積不能與「plotfile」的方法我怎麼可以這樣做呢? (我試過CSV方法和其他計算器解決方案,但該文件的讀取失敗每次)

感謝

+0

您是否使用靜態文件作爲在程序之間傳輸數據的方法而無法使用?它依賴於由於緩存而可能無法預測的硬盤寫入,而且本質上很慢。此外,當新數據準備就緒時,它無法通知繪圖程序。 – Aaron

+0

也注意到......'.ion()'與重新讀取文件和更新數據無關。您必須手動執行 – Aaron

+0

您應該使用[Matplotlib動畫](http://matplotlib.org/1.4.1/examples/animation/index.html) –

回答

0

什麼你需要做的是創造一些方法來自動遍歷文件讀取和圖形繪製操作。這可以用for循環來完成,但我的首選方法可能涉及matplotlib.animation.FuncAnimation()。對於你的情況10 fps可能不夠快,你不得不擔心blitting,但這是一個很好的做法,並且可以幫助你從MPL中獲得更好的速度。提供的exampleFuncAnimation()通過僅調用藝術家繪製的線來更新其數據來使用blitting。如果您使用plt.plotfile(),更新藝術家並讓它正確獲取新數據可能會更困難,所以我建議您自己讀取數據,並致電artists = plt.plot()(或類似)。這使您可以簡單地更新線條藝術家的數據,而無需重新繪製整個圖形:lineartist.set_ydata(dataReadFromFile)