Animación en el cuaderno iPython

Intento poner animaciones en una computadora portátil iPython y no encuentro una solución. Vi una publicación que discutía el uso de widgets interactivos, pero hay un par de problemas que tengo con esto: en primer lugar, cada ejemplo que veo con widgets usa un control deslizante o alguna otra entrada, mientras que solo quiero que la animación se ejecute automáticamente cuando la celda se ejecuta. En segundo lugar, toda la documentación parece desactualizada en el sitio de Jupyter: cada vez que descargo y ejecuto sus cuadernos recibo estos mensajes sobre la desaprobación de ciertos módulos y luego, en el archivo, algo falla al ejecutar, presumiblemente porque están tratando de importar y acceder a los archivos que ya no existen

He visto algunas otras páginas sobre el tema, pero a menudo requieren la descarga de archivos binarios u otros módulos, pero estoy usando parcialmente esto para enseñar matemáticas a algunos estudiantes y les he pedido que descarguen Anaconda. Esperaba no continuar. Confundir el problema haciendo que también descarguen e instalen cosas más complicadas, todo mientras pasan el tiempo sin hablar de las Matemáticas.

En resumen, ¿hay alguna forma de que pueda crear animaciones en una computadora portátil iPython que solo requiera el uso de comandos simples de importación que se ejecutarán de fábrica, por así decirlo, con el software que proviene de Anaconda?

[Editar: También debería tener en cuenta que he usado Tkinter para hacer animaciones, y podría hacer una en matplotlib estoy seguro. Entonces, si hubiera una manera de hacer que las animaciones que produces con las que renderizasen en una computadora portátil iPython, esa sería una solución que funcionaría para mí.]

[Edición adicional: supongo que también podría decir lo que espero animar en este momento, aunque realmente quiero ser bastante flexible sobre la gama de cosas que podría animar si así lo quisiera. En este momento estoy tratando de hacer un reloj digital que muestre cada dígito en números sumerios base-60 para ilustrar un sistema diferente de conteo y base. Por lo tanto, debe mostrar inicialmente | luego después de un segundo || y así sucesivamente hasta que diez se represente como <y así sucesivamente hasta que, finalmente, el reloj marque un minuto en el que ahora se muestre |: | para representar un minuto, un segundo.]

Algunas opciones que tiene para animar gráficos en Jupyter / IPython, usando matplotlib:

  • Uso de la display en un ciclo Use IPython.display.display(fig) para mostrar una figura en la salida. Usando un bucle, deseará borrar la salida antes de que se muestre una nueva figura. Tenga en cuenta que esta técnica da en general no tan suaves resluts. Por lo tanto, aconsejaría usar cualquiera de los siguientes.

     import matplotlib.pyplot as plt import matplotlib.animation import numpy as np from IPython.display import display, clear_output t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() l, = ax.plot([0,2*np.pi],[-1,1]) animate = lambda i: l.set_data(t[:i], x[:i]) for i in range(len(x)): animate(i) clear_output(wait=True) display(fig) plt.show() 

Puede encontrar este tutorial interesante.

Si puede convertir lo que necesita en una animación matplotlib, y estoy seguro de su descripción de que es posible, puede usar

 from matplotlib import rc, animation rc('animation', html='html5') 

y muestra tu animación usando

 anim = animation.FuncAnimation(fig, animate, init_func=init, frames=N, interval=20, blit=True) anim 

Podría ser útil!

Tuve un problema similar, y esta pregunta me ayudó a comenzar. Arreglé un cuaderno que ilustra el uso de FuncAnimation junto con buenas explicaciones de por qué el portátil hace algunas cosas de la manera en que lo hace. También tiene enlaces a las instrucciones en FFmpeg. También tiene enlaces a los ejemplos que utilicé para desarrollar y comprender animaciones. Puedes ver mi contribución en: Ilustración de animación

Para su pregunta, puede encontrar los controles deslizantes interactivos una mejor herramienta. También creé un cuaderno que muestra widgets interactivos en Jupyter. Está disponible aquí ; sin embargo, las partes interactivas no funcionan allí.

Ambos están disponibles en un repository GitHub

Los widgets de Jupyter son una buena forma de mostrar animaciones. El siguiente código muestra un archivo .gif animado …

 from ipywidgets import Image from IPython import display animatedGif = "animatedGifs/01-progress.gif" #path relative to your notebook file = open(animatedGif , "rb") image = file.read() progress= Image( value=image, format='gif', width=100, height=100) display.display(progress) 

Puedes cerrar esta animación usando:

 progress.close() 

NB Encontré algunos bonitos gifs animados de http://www.downgraf.com/inspiration/25-beautiful-loading-bar-design-examples-gif-animated/ .