Umgebung: Python 2.7, Matplotlib 1.3, IPython Notebook 1.1, Linux, Chrome. Der Code befindet sich in einer einzelnen Eingabezelle mit--pylab=inline
Ich möchte IPython-Notebook und Pandas verwenden, um einen Stream zu konsumieren und alle 5 Sekunden einen Plot 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. Wenn ich jedoch versuche, die Daten zu zeichnen (und sie dann in einer Schleife zu aktualisieren), wird der Plot nie in der Ausgabezelle angezeigt. Aber wenn ich die Schleife entferne, zeichne 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 das Diagramm korrekt als mehrere überlappende Linien angezeigt. Aber was ich wirklich will, ist ein Plot, der alle 5 Sekunden angezeigt und aktualisiert wird (oder wann immer die plot()
Funktion aufgerufen wird, genau wie die oben erwähnten Druckanweisungsausgaben, 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 jeder explizit die Funktion draw () plot()
usw. hinzuzufügen . Keine davon funktioniert. Ich frage mich, wie ich einen Plot durch eine for / while-Schleife in einer Zelle im IPython-Notizbuch dynamisch aktualisieren kann.