Mac OSX - AttributeError:'FigureCanvasMac'对象没有属性'restore_region'

Cal*_*eng 35 python macos matplotlib

在我的Mac OSX机器上浏览matplotlib的动画示例 - http://matplotlib.org/examples/animation/simple_anim.html - 我收到此错误: -

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/animation.py", line 248, in _blit_clear
    a.figure.canvas.restore_region(bg_cache[a])
AttributeError: 'FigureCanvasMac' object has no attribute 'restore_region'
Run Code Online (Sandbox Code Playgroud)

之前遇到此问题的人是否知道如何解决此问题?

看起来它是一个已知的(并且在撰写本文时尚未解决)问题 - https://github.com/matplotlib/matplotlib/issues/531

小智 47

刚设置

blit=False
Run Code Online (Sandbox Code Playgroud)

animation.FuncAnimation()被调用时它会起作用.

例如(来自double_pendulum_animated):

ani = animation.FuncAnimation(fig, animate, np.arange(1, len(y)), interval=25, blit=False, init_func=init)
Run Code Online (Sandbox Code Playgroud)

  • 来自http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/,blit = True表示仅重新绘制已更改的部分.默认的OS X后端目前不支持此功能(这也解释了Beau的答案). (7认同)
  • 嘿@jw1123,你怎么知道设置blit = False?这对我有用,只是想了解原因.谢谢. (5认同)
  • @ jw1123我<3你. (4认同)

小智 21

您可以通过切换到其他后端来避免此问题:

import matplotlib
matplotlib.use('TkAgg')
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这要求必须安装Tk(不一定满足),并且必须在`import matplotlib.pyplot作为plt之前" (3认同)

小智 5

https://mail.python.org/pipermail/pythonmac-sig/2012-September/023664.html所述:使用:

import matplotlib
matplotlib.use('TkAgg')

#just *before*

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
Run Code Online (Sandbox Code Playgroud)

这对我使用OSX 10.11.6上安装的ActiveState Tkinter安装的Tkinter很有用,Python 2.71基本动画示例仍然有点嘈杂,直到line_ani代码中的blt = False:

line_ani = animation.FuncAnimation(fig1, update_line, 25, fargs=(data, l),
interval=50, blit=False)
Run Code Online (Sandbox Code Playgroud)


Cal*_*eng 2

看起来这是一个已知的(在撰写本文时尚未解决)问题 - https://github.com/matplotlib/matplotlib/issues/531