2014-01-05 12 views
8

Was ich versuche zu tun, scheint ziemlich einfach zu sein, aber ich habe eine Menge Zeit damit, es zum Laufen zu bringen. Ich versuche einfach, ein Bild mit imshow zu zeichnen und es dann regelmäßig neu zu zeichnen, wenn neue Daten eintreffen.Wie zeichne ich ein Bild mit Pythons Matplotlib neu?

Ich habe mit dieser begann:

fig = figure() 
ax = plt.axes(xlim=(0,200),ylim=(0,200)) 
myimg = ax.imshow(zeros((200,200),float)) 

Dann kann ich gehe davon aus ich so nennen set_data das Bild zu aktualisieren:

myimg.set_data(newdata) 

ich viele andere Dinge ausprobiert habe, Zum Beispiel habe ich ax.imshow(newdata) stattdessen oder ich habe versucht, figure.show() nach set_data().

Antwort

10

Sie können figure.canvas.draw() einfach jedes Mal aufrufen, wenn Sie der Figur etwas Neues hinzufügen. Dadurch wird die Handlung aktualisiert.

from matplotlib import pyplot as plt 

f = plt.figure() 
ax = f.gca() 
f.show() 

for i in range(10): 
    ax.plot(i, i, 'ko') 
    f.canvas.draw() 
    raw_input('pause : press any key ...') 
f.close() 
+1

Das brachte mich einen Schritt näher. Wenn ich den Code oben ausführe, öffnet er eine Figur zu Beginn der Ausführung und zeichnet den endgültigen Plot nur am Ende der Ausführung (anstatt dass bei jedem Treffer ein Punkt erscheint). Ich betreibe Python 2.7 in Spider auf Windows 7, wenn das irgendeine Konsequenz hat. – kjgregory

+0

Ich weiß es nicht. Ich habe es auf Linux und Windows7 getestet und es funktioniert. Dies könnte möglicherweise von Ihrer Version von Matplotlib stammen. Ich glaube, dass sich die Syntax zwischen verschiedenen Versionen ändern kann. Ich benutze Matplotlib 1.2.0 – user2660966

+0

Ich fand heraus, dass, wenn Sie eine plt.pause() darin tun, gibt es der Figur eine Chance, neu zu zeichnen, bevor die Ausführung fortgesetzt wird. Andere Methoden zum Einfügen einer Wartezeit tun dies nicht. – kjgregory

Verwandte Themen