2016-11-03 2 views
1

Ich muss überprüfen, ob meine Parametereinstellung richtig ist, also muss ich viele Plots zeichnen, und um diese Plots zu zeichnen, wähle ich matplotlib. Nach jeder Überprüfung muss ich auf den Schließen-Button oben links klicken. Es ist trivial. Gibt es also irgendeine Methode, die die Handlung in ungefähr 3 oder 5 Sekunden zeigen und automatisch schließen lässt, ohne zu klicken? Ich weiß über die plt.close(), aber es funktioniert nicht. Hier ist mein Code.anzeigen und dann die Figur automatisch in Matplotlib schließen?

from math import * 
import sys 
import numpy as np 
from scipy import special 
import matplotlib.pyplot as plt 

x1=[] 
y1=[] 
x2=[] 
y2=[] 
x3=[] 
y3=[] 
with open('fort.222','r') as f: 
    for line in f: 
     a,b=line.split() 
     x1.append(float(a)) 
     y1.append(float(b)) 

n=int(sys.argv[1]) 
i=0 
with open('fort.777','r') as f: 
    for line in f: 
     if i==0: 
      k1=float(line) 
     i=i+1 

x1,y1=np.array(x1),np.array(y1) 

z1=special.eval_hermite(n,x1*k1)*sqrt(1/(sqrt(pi)*pow(2,n)*factorial(n)))*sqrt(k1)*np.exp(-np.power(k1*x1,2)/2.)                         
plt.figure() 
plt.plot(x1,z1) 
plt.plot(x1,y1) 
plt.plot(x1,np.zeros(len(x1))) 
plt.title('single center & double center') 
plt.xlim(x1.min(),x1.max()) 
plt.ylim(-max(abs(y1.min()-0.1),y1.max()+0.1),max(abs(y1.min()-0.2),y1.max()+0.2)) 
plt.xlabel('$\zeta$'+'/fm') 
plt.legend(('single, n='+sys.argv[1],'double, n='+sys.argv[1]),loc=2,frameon=True) 

plt.show() 
plt.close() 

Antwort

5

Documentation on pyplot.show() reads:

matplotlib.pyplot.show(*args, **kw)

Anzeige eine Figur. Wenn Sie ipython mit seinem pylab-Modus ausführen, zeigen Sie alle Zahlen an und kehren zur ipython-Eingabeaufforderung zurück.

Im nicht interaktiven Modus alle Zahlen und Blöcke anzeigen, bis die Zahlen geschlossen wurden; im interaktiven Modus hat es keinen Effekt , es sei denn, Zahlen wurden vor einem Wechsel von nicht interaktiven zu interaktiven Modus erstellt (nicht empfohlen). In diesem Fall zeigt es die Zahlen an, blockiert aber nicht.

Ein einziges experimentelles Schlüsselwort Argument, block kann oben beschrieben, um das Sperrverhalten zu TrueFalse oder zu überschreiben, eingestellt wird.

So ist die Lösung dieses:

plt.show(block=False) 
time.sleep(3) 
plt.close() 
+3

mit 'plt.pause (3)' hier besser sein würde, wie es die GUI-Ereignisschleife laufen lassen würde, so dass die Zahl interaktiv ist. – tacaswell

+0

@tacaswell meinst du verwenden 'plt.pause (3)' zu ersetzen 'time.sleep (3)', aber wenn ich damit ersetzt habe, habe ich einige Warnungen auf meinem Terminal */usr/local/lib/python2. 7/dist-packages/matplotlib/backend_bases.py: 2437: MatplotlibDeprecationWarning: Verwenden der Standard-Ereignisschleife, bis die für diese GUI spezifische Funktion implementiert ist warnings.warn (str, mplDeprecation), was ist das Problem hier? – zmwang

Verwandte Themen