In den Antworten zum dynamischen Aktualisieren eines Plots in einer Schleife in einem Ipython-Notizbuch (innerhalb einer Zelle) wird ein Beispiel für das dynamische Aktualisieren eines Plots in einem Jupyter-Notizbuch in einer Python-Schleife gegeben. Dies funktioniert jedoch, indem der Plot bei jeder Iteration zerstört und neu erstellt wird. Ein Kommentar in einem der Threads weist darauf hin, dass diese Situation durch die Verwendung der neuen %matplotlib nbagg
Magie verbessert werden kann , die eine interaktive Figur bietet, die eher in das Notizbuch eingebettet ist als ein statisches Bild.
Dies ist jedoch wunderbar neu nbagg
Soweit ich das beurteilen kann, scheint Funktion jedoch völlig undokumentiert zu sein, und ich kann kein Beispiel dafür finden, wie sie zum dynamischen Aktualisieren eines Plots verwendet werden kann. Meine Frage ist also, wie man ein vorhandenes Diagramm in einem Jupyter / Python-Notizbuch mithilfe des nbagg-Backends effizient aktualisiert. Da das dynamische Aktualisieren von Plots in matplotlib im Allgemeinen ein heikles Thema ist, wäre ein einfaches Arbeitsbeispiel eine enorme Hilfe. Ein Verweis auf eine Dokumentation zu diesem Thema wäre ebenfalls äußerst hilfreich.
Um klar zu sein, wonach ich frage: Ich möchte einen Simulationscode für einige Iterationen ausführen, dann ein Diagramm des aktuellen Status zeichnen, es dann für einige weitere Iterationen ausführen und dann das Diagramm entsprechend aktualisieren der aktuelle Zustand und so weiter. Die Idee ist also, ein Diagramm zu zeichnen und dann ohne Interaktion des Benutzers die Daten im Diagramm zu aktualisieren, ohne das Ganze zu zerstören und neu zu erstellen.
Hier ist ein leicht modifizierter Code aus der Antwort auf die oben verknüpfte Frage, der dies erreicht, indem die gesamte Figur jedes Mal neu gezeichnet wird. Ich möchte das gleiche Ergebnis erzielen, aber effizienter nutzen 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:
Schleife in eine for-Schleife ändere , erhalte ich am Ende der Schleife zwei statische Bilder des letzten Plots anstelle eines interaktiven nbagg-Bildes. Irgendeine Idee warum das so ist?