2011-12-06 33 views
7

我有一個python腳本,它讀入一個數據文件並使用matplotlib庫顯示一個帶有四個圖的圖。數據文件每隔幾秒更新一次,因爲它是一個同時運行的不同軟件的輸出文件。我希望我的matplotlib圖中的四個地塊每20秒使用更新後的數據文件進行刷新。我實現了這一問題的方法如下:如何在數據文件更改時動態更新我的matplotlib圖形?

import pylab as pl 
import time 

pl.ion() 
fig = pl.figure() 
while True: 
    f = open('data.out', 'rb') 
    #code to parse data and plot four charts 
    ax = fig.add_subplot(2,2,1) 
    #... 
    ax = fig.add_subplot(2,2,4) 
    #... 
    pl.draw() 
    time.sleep(20) 

這工作,但我失去了縮放和平移按鈕的功能,如果pl.show()被調用它正常工作。這不是最佳的。但是,如果將pl.show()替換爲pl.draw(),則腳本不再更新圖。有沒有辦法動態更新一個繪圖而不會完全失去縮放/平移功能?

回答

1

您應該使用計時器。您使用的計時方法取決於您用於matplotlib的GUI後端。

Here你有一個使用wx.Timer類的wx例子。

在matplotlib站點中還有其他動態圖的例子。

0

你的代碼有點含糊不清,不知道發生了什麼。

我可以提供這樣的: 如果你曾經創建的次要情節,您應保留正常功能,保存所有軸的對象,然後調用顯示()。

那些次要情節的後續變化可以做這樣的:

#inside while loop 
for i in #subplotlist 
    ax[i].clear() #ax[i] is the axis object of the i'th subplot 
    ax[i].plot(#plotstuff) 
    ax[i].draw() 

進行縮放和平移工具欄可以通過手,如果你願意的話可以加入。

相關問題