2012-11-04 37 views
34

Passeggiando per esempio l'animazione di matplotlib sulla mia macchina Mac OSX - http://matplotlib.org/examples/animation/simple_anim.html - sto ottenendo questo errore: -Mac OSX - AttributeError: oggetto 'FigureCanvasMac' non ha alcun attributo 'restore_region'

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' 

Qualcuno che ha incontrato questo prima di sapere come risolvere questo problema?

sembra che sia un noto (e irrisolto in questo momento della scrittura) edizione - https://github.com/matplotlib/matplotlib/issues/531

+0

Confermato. Ho appena provato e ha avuto lo stesso errore continuamente. – num3ric

risposta

21

si può evitare il problema passando ad un diverso backend:

import matplotlib 
matplotlib.use('TkAgg') 
+3

Si noti che ciò richiede che Tk debba essere installato (non necessariamente soddisfatto), e che questo deve diventare prima di "import matplotlib.pyplot as plt' – emunsing

47

Basta impostare

blit=False 

quando viene chiamato animation.FuncAnimation() e funzionerà.

Per esempio (from double_pendulum_animated):

ani = animation.FuncAnimation(fig, animate, np.arange(1, len(y)), interval=25, blit=False, init_func=init) 
+5

Hey @ jw1123, come sapevate impostare blit = False? Questo ha funzionato per me, cercando solo di capire perché. Grazie. – ingrid

+7

Da http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/, blit = True significa solo ri-disegnare le parti che sono cambiate. E il back-end OS X predefinito attualmente non supporta questo (che spiega anche la risposta di Beau). –

+4

@ jw1123 I <3 Tu. –

4

Come osservato in https://mail.python.org/pipermail/pythonmac-sig/2012-September/023664.html uso:

import matplotlib 
matplotlib.use('TkAgg') 

#just *before* 

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

Questo ha funzionato per me con Tkinter installato utilizzando l'installazione Tkinter ActiveState su OSX 10.11.6, Python 2.71 L'esempio di animazione di base è ancora un po 'rumoroso finché blt = False nel codice line_ani qui:

line_ani = animation.FuncAnimation(fig1, update_line, 25, fargs=(data, l), 
interval=50, blit=False) 
Problemi correlati