我创建了一些效果很好的动画 - 尽管 - 在设置关键字时效果很慢:
blit=False
然而,在我通过设置blit = True加速动画的努力中,我在运行测试时遇到了一些奇怪的KeyError异常。
最后,我有一个预感,它可能与编码错误无关,但可能有设置甚至是错误。
因此,我从here导入了 simple_anim.py 脚本,发现发生了同样的错误。
我已经测试了更多的例子,他们都给出了相同的例外.... :(
任何人都可以帮助我并提供一些有关正在发生的事情的信息吗?
代码如下:
"""
A simple example of an animated plot
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots()
x = np.arange(0, 2*np.pi, 0.01)
line, = ax.plot(x, np.sin(x))
def animate(i):
line.set_ydata(np.sin(x + i/10.0)) # update the data
return line,
# Init only required for blitting to give a clean slate.
def init():
line.set_ydata(np.ma.array(x, mask=True))
return line,
ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), init_func=init,
interval=25, blit=True)
plt.show()
引发的例外是:
Traceback (most recent call last):
File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/backend_bases.py", line 1305, in _on_timer
ret = func(*args, **kwargs)
File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 1021, in _step
still_going = Animation._step(self, *args)
File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 827, in _step
self._draw_next_frame(framedata, self._blit)
File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 845, in _draw_next_frame
self._pre_draw(framedata, blit)
File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 858, in _pre_draw
self._blit_clear(self._drawn_artists, self._blit_cache)
File "/home/dj754/anaconda3/lib/python3.5/site-packages/matplotlib/animation.py", line 898, in _blit_clear
a.figure.canvas.restore_region(bg_cache[a])
KeyError: <matplotlib.axes._subplots.AxesSubplot object at 0x7fb3b9d3a198>
答案 0 :(得分:0)
在家里进行一些调试之后,我找到了自己问题的答案。我怀疑它是ipython中的一个错误,但我不想肯定地说明这一点,因为99%以上的时间,错误发生在屏幕和屏幕前面的椅子背面。
事实证明,它源于我之前之前运行我自己提供的脚本:通过plt.ion()
启用互动
这是一个新手的错误,我已经纠正了。但是,我在easy_anim.py之前运行的脚本是通过run simple_anim.py' (I prefer developing with IPython.. legacy of my MATLAB experiences). I've forgotten to mention this, but this turned out to be critical. If I had tried running the code *the normal way* via
python3 simple_anim.py在IPython3中调用的'一切都会正常工作!
然而,事实证明将交互模式设置为on,而在IPython中是导致异常的原因。
我非常清楚通过plt.ion()
在IPython中启用交互模式是非常愚蠢的,然而,它发生在我身上,我怀疑更多人受此影响。因此,它认为此行为(引发此类KeyError
异常)至少是不需要的行为,可能是Ipython或matplotlib.pyplot.ion()
函数中的错误。
有没有人对如何以及是否应该提及也许 -bug有任何想法?