En las respuestas sobre cómo actualizar dinámicamente una gráfica en un bucle en el cuaderno ipython (dentro de una celda) , se da un ejemplo de cómo actualizar dinámicamente una gráfica dentro de un cuaderno Jupyter dentro de un bucle Python. Sin embargo, esto funciona destruyendo y recreando la trama en cada iteración, y un comentario en uno de los hilos señala que esta situación se puede mejorar usando la %matplotlib nbagg
magia nueva , que proporciona una figura interactiva incrustada en el cuaderno, en lugar de que una imagen estática.
Sin embargo, esta maravillosa nbagg
característica nueva parece estar completamente indocumentada por lo que puedo decir, y no puedo encontrar un ejemplo de cómo usarla para actualizar dinámicamente una trama. Por lo tanto, mi pregunta es, ¿cómo se actualiza de manera eficiente una trama existente en un cuaderno Jupyter / Python, usando el backend nbagg? Dado que la actualización dinámica de gráficos en matplotlib es un problema complicado en general, un ejemplo de trabajo simple sería de gran ayuda. Un puntero a cualquier documentación sobre el tema también sería de gran ayuda.
Para que quede claro lo que estoy pidiendo: lo que quiero hacer es ejecutar un código de simulación para algunas iteraciones, luego dibujar un diagrama de su estado actual, luego ejecutarlo para algunas iteraciones más, luego actualizar el diagrama para reflejar el estado actual y así sucesivamente. Entonces, la idea es dibujar una trama y luego, sin ninguna interacción por parte del usuario, actualizar los datos en la trama sin destruir y volver a crear todo.
Aquí hay un código ligeramente modificado de la respuesta a la pregunta vinculada anterior, que logra esto al volver a dibujar la figura completa cada vez. Quiero lograr el mismo resultado, pero usando de manera más eficiente nbagg
.
%matplotlib inline
import time
import pylab as pl
from IPython import display
for i in range(10):
pl.clf()
pl.plot(pl.randn(100))
display.display(pl.gcf())
display.clear_output(wait=True)
time.sleep(1.0)
while True:
a un bucle for, cuando el bucle finaliza, obtengo dos imágenes estáticas del último gráfico, en lugar de una nbagg interactiva. ¿Alguna idea de por qué es eso?