2013-02-21 6 views
43

Meine Frage ist einfach: Ich habe ein Python-Skript, das mit Matplotlib Zahlen erzeugt. Jedes Mal, wenn ich es laufe, erzeugt es neue Fenster mit Zahlen. Wie kann ich mit dem Skript Fenster schließen, die beim letzten Mal geöffnet wurden?Schließen Sie bereits vorhandene Abbildungen in Matplotlib, wenn Sie von der Sonnenfinsternis ausgehen

Der analoge Befehl in Matlab ist, am Anfang des Matlab-Skripts 'close all' zu setzen.

ich mehrere Vorschläge gesehen haben so etwas wie

import matplotlib.pyplot as plt 
plt.close("all") 

Diese Lösung funktioniert tun, wenn Sie Ihr Skript aus der Python-Shell laufen, zB

>>>> execfile("myScript.py") 

jedoch verwenden, habe ich, dass dieses doesn gefunden Es funktioniert nicht, wenn ich das Skript mit Eclipse/PyDev ausführe. Wie kann ich es in Eclipse arbeiten lassen?

Beispiel:

from numpy import * 
from matplotlib.pyplot import * 
from scipy import * 

close("all") 
    #close any previously open plots - this doesn't work when running via Eclipse 

t = linspace(0, 0.1,1000) 
w = 60*2*pi 

figure() 
plot(t,cos(w*t)) 
plot(t,cos(w*t-2*pi/3)) 
plot(t,cos(w*t-4*pi/3)) 
show() 

dies die idealen Wellenformen für eine schöne 3-Phasen-Stromversorgung zeichnen soll.

Antwort

56

Sie können eine Figur in der Nähe matplotlib.pyplot.close, zum Beispiel Aufruf:

from numpy import * 
import matplotlib.pyplot as plt 
from scipy import * 

t = linspace(0, 0.1,1000) 
w = 60*2*pi 


fig = plt.figure() 
plt.plot(t,cos(w*t)) 
plt.plot(t,cos(w*t-2*pi/3)) 
plt.plot(t,cos(w*t-4*pi/3)) 
plt.show() 
plt.close(fig) 

Sie können auch schließen Sie alle Zahlen von matplotlib.pyplot.close("all")

+2

Dies funktioniert von einer Konsole (zB 'execfile ("script.py") in der Python-Shell), aber nicht in Eclipse/PyDev. Was ist der Unterschied? – AnjoMan

+0

Schön. Fügen Sie einen Zufallsvektor zu cos (w * t-4 * pi/3) für Rauschen hinzu. – Andrew

+4

@AnjoMan Warum hast du diese Antwort akzeptiert? es beantwortet deine Frage eindeutig nicht. – dbliss

3

Siehe Bi Rico Antwort für den Fall von Eclipse allgemeinen Aufruf.

Für jeden - wie mich -, der hier landet, weil Sie viele Fenster haben und Sie kämpfen, um sie alle zu schließen, kann das Töten von Python je nach Ihren Umständen effektiv sein. Es funktioniert wahrscheinlich unter fast allen Umständen - einschließlich mit Eclipse.

Ich habe gerade 60 Plots von Emacs erstellt (ich bevorzuge das zu Eclipse) und dann dachte ich, dass mein Skript beendet wurde. Running close('all') in meinem Ipython-Fenster funktionierte nicht für mich, weil die Plots nicht von ipython kamen, so suchte ich nach Python-Prozessen zu laufen.

Als ich den Dolmetscher getötet das Skript ausgeführt wird, dann werden alle 60 Parzellen wurden geschlossen - zB

$ ps aux | grep python 
rsage 11665 0.1 0.6 649904 109692 ?  SNl 10:54 0:03 /usr/bin/python3 /usr/bin/update-manager --no-update --no-focus-on-map 
rsage 12111 0.9 0.5 390956 88212 pts/30 Sl+ 11:08 0:17 /usr/bin/python /usr/bin/ipython -pylab 
rsage 12410 31.8 2.4 576640 406304 pts/33 Sl+ 11:38 0:06 python3 ../plot_motor_data.py 
rsage 12431 0.0 0.0 8860 648 pts/32 S+ 11:38 0:00 grep python 

$ kill 12410 

Bitte beachte, dass ich nicht meine ipython/pylab töten, auch nicht töten ich den Update Manager (Tötung der Update-Manager ist wahrscheinlich eine schlechte Idee) ...

+0

+1 Ich hatte ähnliche Probleme mit PyCharm, der entscheidende Punkt für mich war, den Python-Prozess zu beenden, der vom PyCharm-Editor hervorgebracht wird und in anderen Emacs/Eclipse/PyDev zu erraten. In PyCharm klicken Sie einfach auf das rote "X" im unteren Fenster. – shev72

Verwandte Themen