在我的带有TkAgg后端的计算机上,在绘图窗口冻结之前,我得到大约20帧(60个).使用Qt4Agg,我只得到一个冷冻的黑色窗口,并且根本没有绘制帧.我尝试过不同的NumPy,PyQt,Python和Matplotlib版本的多种组合,但总能得到相同的结果.
如果这对你有用或者看错了,请告诉我.我很确定这在过去确实有效,所以我认为它可能是Windows问题或与ion()相关的东西.
仅供参考我正在使用Windows 7(32位),我已经使用Python 2.6 / 2.7,MPL 1.0.0 / 0.9.9.8,PyQt 4.6 / 4.7,Numpy 1.4 / 1.5b进行了测试.
import matplotlib matplotlib.use('TkAgg') # Qt4Agg gives an empty,black window from pylab import * import time ion() hold(False) # create initial plot z = zeros(10) line,= plot(z) ylim(-3,3) for i in range(60): print 'frame:',i d = randn(10) line.set_ydata(d) draw() time.sleep(10e-3)
这个更简单的版本在前几帧之后也会冻结:
from pylab import * ion() hold(False) for i in range(40): plot(randn(10)) draw() show()
谢谢!
编辑:这些人似乎和我有相同或类似的问题:
> mail-archive.com/matplotlib-users@lists.sourceforge.net/msg10844.html
> stackoverflow.com/questions/2604119/matplotlib-pyplot-pylab-not-updating-figure-while-isinteractive-using-ipython
> mail-archive.com/matplotlib-users@lists.sourceforge.net/msg01283.html
解决方法
我建议您使用GUI工具包在一定延迟后安排函数调用,而不是坐在带睡眠的循环中.
def update_function(): # do frame calculation here refresh_timer = QtCore.QTimer() QtCore.QObject.connect( refresh_timer,QtCore.SIGNAL('timeout()'),update_function ) refresh_timer.start( 1.0 / 30 ) # have update_function called at 30Hz
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。