Matplotlib动画会在几帧后冻结或无法正常工作

问题描述 投票:6回答:8

我一直在努力使这个简单的脚本正常工作,但是我似乎无济于事。这是对Matplotlib网站上最基本的动画情节示例代码的略微修改,应该只显示几帧噪声(我对他们的网站BTW的未修改代码有相同的问题)。

在带有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()

谢谢!

EDIT:这些人似乎和我有相同或相似的问题:

  • mail-archive.com/[email protected]/msg10844.html
  • stackoverflow.com/questions/2604119/matplotlib-pyplot-pylab-not-upsuping-figure while-isinteractive-using-ipython
  • mail-archive.com/[email protected]/msg01283.html

[看起来他们中的任何一个都不能够::]]

我一直在努力使这个简单的脚本正常工作,但是我似乎无济于事。这是Matplotlib网站上最基本的动画情节示例代码的略微修改,即...

python animation numpy pyqt matplotlib
8个回答
5
投票

通常,GUI框架需要“拥有”程序的主循环。陷入紧张的睡眠中以延迟迭代通常会“破坏” GUI应用程序(您的问题描述与这些方面的典型破坏相一致)。 matplotlib开发人员可能已经实现了一些幕后逻辑,以使某些工具包无法锁定这些锁,但对程序进行略微重组应消除出现主循环所有权的任何可能性(我认为非常


1
投票

[当您说在前几帧之后停滞时,是指2或3,还是40或60,因为这是循环的上限?


1
投票

通常,您不能像这样使用show()和draw()。正如帖子所建议的那样,您需要一个小的GUI循环,只需查看Matplotlib页面上的Animations示例即可。


1
投票

经过数小时与这个问题的斗争,我想我已经找到了答案:要使用matplotlib制作这些简单的动画,您可以only


1
投票

我也遇到了同样的麻烦,如果我将焦点移开或尝试拖动它,则窗口将冻结,在Windows 7上使用带有Matplotlib 1.3和TKAgg后端的Python 2.7。我在主while循环中调用了time.sleep(1),当我将其替换为plt.pause(1)时,此问题得以解决。因此,请尝试使用matplotlib的暂停功能而非时间模块睡眠功能,它对我有用。


1
投票

调用time.sleep()或plt.pause()会在使用blitting时导致图形窗口闪烁,但通过简单地显式调用事件循环,我得到了不错的结果:


0
投票

我在同一个问题上苦苦挣扎了一段时间。我建议看一下这个例子:http://matplotlib.sourceforge.net/examples/animation/strip_chart_demo.html


0
投票

来自未来的问候。

© www.soinside.com 2019 - 2024. All rights reserved.