2012-08-01 5 views
6

Ich habe eine Suche auf SO, aber habe nicht die richtige "Lösung" für mein Problem gefunden. Ich führe eine Schleife für einige Daten, die ich plotten möchte. In jedem Schritt der Schleife - plotte ich die Figur mit plt.show(). Da dies jedoch eine blockierende Funktion ist, bleibe ich stecken, bis ich das Fenster manuell schließe und dann die Schleife fortfährt und das nächste Diagramm erscheint.Python und Update Figur in Matplotlib

Was ich tun möchte, ist in der Lage, ein Tastendruckereignis zu binden, um die Figur zu schließen und die Schleife fortzusetzen (anstatt mit der Maus zu "X" aus der Abbildung).

Wenn dies nicht möglich ist, möchte ich einen Timer einstellen, um die Figur zu schließen und die Schleife fortzusetzen.

Alle meine Probleme scheinen mit der Tatsache zu tun, dass plt.show() alles andere blockiert - irgendwie herum?

Einige Anmerkungen zu meinen Plots: Sie verwenden die gleichen Achsen, enthalten aber ein Streudiagramm, Füllfelder und Anmerkungen - die sich immer ändern.

Danke!

Antwort

4

Versuchen ion von matplotlib.pyplot mit:

import matplotlib.pyplot as pp 
pp.ion() 
fig = pp.figure() 

Weiteren Daten zu ion und interaktiven vs nicht-interaktive Nutzung here

Alternativ, wenn Sie einen Rückruf mit der Taste drückt Ansatz zuweisen hinwollen

def moveon(event): 
    pp.close() 

cid = fig.canvas.mpl_connect('key_press_event', moveon) 
pp.show() 

Ein Event-Timer ist schwieriger, weil dieDer Befehlblockiert, sodass wahrscheinlich Threading verwendet werden muss.

+1

Dies ist eine gute Antwort. Darüber hinaus könnten Sie es in eine GUI mit etwas wie PyQT setzen, die Ihnen mehr Kontrolle und die Möglichkeit gibt, bei Bedarf zu aktualisieren. – TimothyAWiseman

+0

Das hat bei mir nicht funktioniert. Ich habe genau den gleichen Code verwendet, wie er geliefert wurde und seltsame Dinge passieren. Was geschah, war, dass alle Figuren nacheinander geöffnet wurden (ich drückte nicht und Knöpfe) und sie hatten nichts in ihnen. Außerdem erschien "Not Responding" und mein Python wurde heruntergefahren. Die pp.ion() scheint die Probleme zu verursachen. Hilfe?? – mcfly

+0

@mcfly: Die Option 'ion()' bedeutet, dass die Ausführung nicht angehalten wird - wenn Sie die vorhandene Zeichnung jedes Mal ersetzen möchten, rufen Sie nur 'figure' einmal auf. – jmetz