W odpowiedziach na to, jak dynamicznie aktualizować wykres w pętli w notatniku ipython (w obrębie jednej komórki) , podano przykład dynamicznego aktualizowania wykresu w notatniku Jupyter w pętli Pythona. Działa to jednak poprzez niszczenie i ponowne tworzenie fabuły w każdej iteracji, a komentarz w jednym z wątków zauważa, że tę sytuację można poprawić za pomocą nowej %matplotlib nbagg
magii, która zapewnia raczej interaktywną figurę osadzoną w notatniku, niż statyczny obraz.
Jednak ta wspaniała nowa nbagg
funkcja wydaje się być całkowicie nieudokumentowana, o ile wiem, i nie mogę znaleźć przykładu, jak jej użyć do dynamicznej aktualizacji fabuły. Dlatego moje pytanie brzmi, jak skutecznie zaktualizować istniejącą działkę w notatniku Jupyter / Python, używając zaplecza nbagg? Ponieważ dynamiczne aktualizowanie wykresów w matplotlib jest ogólnie trudnym problemem, prosty przykład roboczy byłby ogromną pomocą. Niezwykle pomocny byłby również wskaźnik do dowolnej dokumentacji na ten temat.
Aby było jasne, o co proszę: chcę uruchomić kod symulacji na kilka iteracji, następnie narysować wykres jego obecnego stanu, a następnie uruchomić go przez kilka kolejnych iteracji, a następnie zaktualizować wykres, aby odzwierciedlić aktualny stan i tak dalej. Chodzi więc o to, aby narysować fabułę, a następnie, bez żadnej interakcji ze strony użytkownika, zaktualizować dane na wykresie bez niszczenia i ponownego tworzenia całości.
Oto nieco zmodyfikowany kod z odpowiedzi na powyższe pytanie, do którego prowadzi łącze, w którym za każdym razem rysuje się od nowa całą figurę. Chcę osiągnąć ten sam efekt, ale wydajniej używając 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:
pętlę na for, kiedy pętla się kończy, otrzymuję dwa statyczne obrazy ostatniej działki, zamiast interaktywnego nbagg. Masz jakiś pomysł, dlaczego tak jest?