2011-12-06 31 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() 

进行缩放和平移工具栏可以通过手,如果你愿意的话可以加入。

相关问题