Nelle risposte su come aggiornare dinamicamente un grafico in un loop in ipython notebook (all'interno di una cella) , viene fornito un esempio di come aggiornare dinamicamente un grafico all'interno di un notebook Jupyter all'interno di un loop Python. Tuttavia, questo funziona distruggendo e ricreando la trama ad ogni iterazione, e un commento in uno dei thread fa notare che questa situazione può essere migliorata usando la nuova %matplotlib nbagg
magia, che fornisce una figura interattiva incorporata nel taccuino, piuttosto di un'immagine statica.
Tuttavia, questa meravigliosa nuova nbagg
funzionalità sembra essere completamente priva di documenti per quanto ne so, e non sono in grado di trovare un esempio di come usarla per aggiornare dinamicamente una trama. Quindi la mia domanda è: come si aggiorna in modo efficiente una trama esistente in un notebook Jupyter / Python, utilizzando il backend nbagg? Poiché l'aggiornamento dinamico dei grafici in matplotlib è un problema complesso in generale, un semplice esempio funzionante sarebbe di enorme aiuto. Anche un puntatore a qualsiasi documentazione sull'argomento sarebbe estremamente utile.
Per essere chiari quello che sto chiedendo: quello che voglio fare è eseguire del codice di simulazione per alcune iterazioni, quindi disegnare un grafico del suo stato corrente, quindi eseguirlo per qualche altra iterazione, quindi aggiornare il grafico per riflettere lo stato attuale e così via. Quindi l'idea è di disegnare una trama e quindi, senza alcuna interazione da parte dell'utente, aggiornare i dati nella trama senza distruggere e ricreare l'intera cosa.
Ecco un po 'di codice leggermente modificato dalla risposta alla domanda collegata sopra, che ottiene ciò ridisegnando ogni volta l'intera figura. Voglio ottenere lo stesso risultato, ma utilizzando in modo più efficiente 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:
ciclo in un ciclo for, quando il ciclo finisce ottengo due immagini statiche dell'ultima trama, piuttosto che una nbagg interattiva. Qualche idea sul perché sia?