Plotten von dynamischen Daten mit matplotlib
Ich Schreibe eine Anwendung die Anzeige von Daten, die dynamisch ändert (die gelesenen Daten von einem socket).
Als "dummy" - Fall, ich versuche zu zeichnen, ein Sinus mit einer amplitude, multipliziert mit 1.1, jede Sekunde:
import numpy as np
import matplotlib.pyplot as plt
import time
x = np.arange(0, 10, 0.1);
y = np.sin(x)
for i in xrange(100):
plt.plot(x, y)
time.sleep(1)
y=y*1.1
Dies ist offensichtlich nicht die Art, wie Sie es tun, aber es zeigt meine Absichten.
Wie kann es gemacht werden, richtig?
EDIT:
Im folgenden wird die traceback-Ausgang des code-Vorschlag in @mskimm Antwort:
plt.show() #Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 505, in run
self.__target(*self.__args, **self.__kwargs)
File "<ipython-input-5-ed773f8e3e84>", line 7, in update
plt.draw()
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 466, in draw
get_current_fig_manager().canvas.draw()
File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 240, in draw
tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2)
File "/usr/lib/pymodules/python2.7/matplotlib/backends/tkagg.py", line 12, in blit
tk.call("PyAggImagePhoto", photoimage, id(aggimage), colormode, id(bbox_array))
RuntimeError: main thread is not in main loop
EDIT 2:
es stellt sich heraus, dass der gleiche code funktioniert bei der Ausführung im qtconsole... (keine Ahnung warum?)
Wie auch immer, jeder drucken, um den Maßstab zu zeichnen, so dass die "animation" fehlt.
Ich versuche es mal mit plt.autoscale_view(False,False,False)
aber das verursacht keine Handlung überhaupt.
ja, einen animierten plot. sorry für nicht deutlich genug.
InformationsquelleAutor user3515666 | 2014-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es bessere Möglichkeiten, dies zu tun mit der matplotlib-animation-API,
aber hier ist eine quick-and-dirty-Ansatz:
Sind die wesentlichen Schritte sind:
plt.ion()
.plot
wieder.plt.pause
.Ich enthalten den code, um die Auto Skalierung des Viewports, aber das ist nicht unbedingt notwendig.
+1, Das ist viel besser. Weil ich nicht wusste
ion
implementierte ich mehrere Programme mitthread
.InformationsquelleAutor perimosocordiae
Ist es schwer sich zu bewerben
animated
? Wie wäre es mitthread
, dass Aktualisierungen der Abbildung.Obwohl
plt.show()
blockiert, diethread
update der Abbildung.InformationsquelleAutor emeth