So aktualisieren Sie einen Plot in einer Schleife in ipython notebook dynamisch (innerhalb einer Zelle)

Umgebung: Python 2.7, Matplotlib 1.3, IPython Notebook 1.1, Linux, Chrome. Der Code befindet sich in einer einzelnen Eingabezelle unter Verwendung von--pylab=inline

Ich möchte IPython-Notizbücher und -Pandas verwenden, um einen Stream zu konsumieren und alle 5 Sekunden ein Diagramm dynamisch zu aktualisieren.

Wenn ich nur die print-Anweisung verwende, um die Daten im Textformat zu drucken, funktioniert das einwandfrei: Die Ausgabezelle druckt einfach weiter Daten und fügt neue Zeilen hinzu. Aber wenn ich versuche, die Daten zu zeichnen (und sie dann in einer Schleife zu aktualisieren), wird die Zeichnung nie in der Ausgabezelle angezeigt. Aber wenn ich die Schleife entferne, zeichne ich sie einfach einmal. Es funktioniert gut.

Dann habe ich einen einfachen Test gemacht:

i = pd.date_range('2013-1-1',periods=100,freq='s')
while True:
    plot(pd.Series(data=np.random.randn(100), index=i))
    #pd.Series(data=np.random.randn(100), index=i).plot() also tried this one
    time.sleep(5)

Die Ausgabe zeigt nichts an, bis ich den Vorgang manuell unterbreche (Strg + m + i). Und nachdem ich es unterbrochen habe, wird der Plot korrekt als mehrere überlappende Linien angezeigt. Aber was ich wirklich will, ist eine Handlung, die alle 5 Sekunden (oder immer wenn dieplot() Die Funktion wird aufgerufen, genau wie die oben erwähnten Ausgaben der print-Anweisung (was gut funktioniert). Nur das endgültige Diagramm zu zeigen, nachdem die Zelle vollständig fertig ist, ist NICHT das, was ich will.

Ich habe sogar versucht, nach jedem Befehl die Funktion draw () explizit hinzuzufügenplot()usw. Keiner von ihnen funktioniert. Fragen Sie sich, wie Sie einen Plot mithilfe einer for / while-Schleife in einer Zelle in IPython Notebook dynamisch aktualisieren können.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage