¿Alguna razón por la que las animaciones de matplotlib solo funcionen en una sesión interactiva?

Si creo un archivo test.py con el código

 import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation if __name__ == '__main__': fig = plt.figure() title = fig.suptitle("Test _") def anim(i): title.set_text("Test %d" % i) plt.plot([0,1], [0,1]) FuncAnimation(fig, anim) plt.show() 

y trato de ejecutarlo en mi línea de comandos, usando python test.py , obtengo una pantalla vacía con el título Test _ y sin ningún eje.

Lo mismo ocurre cuando se ejecuta con python -i test.py , pero si ahora ingreso el mismo código en la sesión interactiva

 >>> fig = plt.figure() >>> title = fig.suptitle("Test _") >>> FuncAnimation(fig, anim) >>> plt.show() 

Todo simplemente funciona como se espera.

He estado observando esto durante tanto tiempo y parece que no encuentro ningún problema o pregunta relacionada con esto. Estoy usando matplotlib 2.0.0 en python 3.5.2 en OS X.

¿Es esto un error conocido? ¿Alguien con ideas de por qué esto podría estar sucediendo o cómo podría resolverse?

De la documentación de la animación : “[..] es fundamental mantener una referencia al objeto de instancia”.

Por lo tanto, debe mantener viva la instancia de FuncAnimation asignándola a una variable.

 import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation if __name__ == '__main__': fig = plt.figure() title = fig.suptitle("Test _") def anim(i): title.set_text("Test %d" % i) plt.plot([0,1], [0,1]) ani = FuncAnimation(fig, anim) plt.show()