2013-02-21 16 views
43

Soruma basit: matplotlib kullanarak şekiller oluşturan bir python betiğim var. Her çalıştırdığımda rakamlarla yeni pencereler oluşturur. Komut dosyası, önceki çalıştırıldığında açılan pencereleri nasıl kapatır? Matlabdaki analog komut, matlab komut dosyanızın başına 'tümünü kapat' komutunu koymaktır.Önceden varolan rakamları, tutulmadan çalıştırılırken matplotlib içinde kapatın

Ben mesela

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

kullanarak piton kabuğundan kodunuzu çalıştırabilir Bu çözüm çalışır

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

, böyle bir şey yapmak için birkaç öneri gördük, bu doesn bulduk Eclipse/PyDev kullanarak komut dosyasını çalıştırırsam işe yaramaz. Eclipse'de çalışmak için nasıl alabilirim?

örnek:

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() 

Bu güzel 3 fazlı güç kaynağı için idealdir dalga şekillerini çizmek gerekir.

cevap

56

Örneğin, matplotlib.pyplot.close arayarak bir rakam kapatabilirsiniz:

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) 

yapabilirsiniz genel Eclipse durumu için matplotlib.pyplot.close("all")

+2

Bu, bir konsoldan çalışır (örn. python kabuğundaki '>>> execfile ("script.py") "), ancak Eclipse/PyDev'de bulunmaz. Fark ne? – AnjoMan

+0

Güzel. Gürültü için rastgele bir vektör ekleyin (w * t-4 * pi/3). – Andrew

+4

@AnjoMan Bu cevabı neden kabul ettiniz? Açıkça sorunuza cevap vermiyor. – dbliss

3

Bkz Bi Rico cevabını arayarak tüm açık rakamları.

Herkes gibi - benim için çok fazla pencereye sahip olduğunuz ve hepsini kapatacağınız için buraya inen herkes için, python'u öldürmek, koşullarınıza bağlı olarak etkili olabilir. Muhtemelen Eclipse dahil olmak üzere neredeyse her koşulda çalışır.

Sadece emacs'tan 60 parsel ürettim (tutmayı tercih ederim) ve sonra senaryonun çıkmış olduğunu düşündüm. Ipython penceremde close('all') çalışıyordu çünkü araziler ipython'dan gelmiyordu, bu yüzden python işlemlerini yürütmeye çalıştım. Senaryoyu çalışan tercüman öldürüldü

, sonra tüm 60 araziler kapatıldı - örneğin, benim ipython/PyLab öldürmedi, ne de güncelleme yöneticisi öldürdün

$ 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 

Not (öldürme güncelleme yöneticisi büyük olasılıkla kötü bir fikirdir) ...

+0

+1 PyCharm kullanarak benzer sorunlar yaşadım, benim için önemli olan nokta PyCharm editörü tarafından ortaya çıkan ve diğer Emacs/Eclipse/PyDev'de tahmin edilen python işlemini öldürüyordu. PyCharm'da bu, alt pencerede sadece kırmızı "X" e tıklıyor. – shev72

İlgili konular