2012-08-01 18 views
6

SO üzerinde bir arama yaptım, ancak sorunumu doğru bir şekilde çözemedim. Ben çizmek istediğim bazı veriler üzerinde bir döngü yürütüyorum. Döngünün her adımında - plt.show() ile grafiği çiziyorum. Ancak, bu bir engelleme işlevi olduğu için, pencereyi elle kapatıncaya kadar takılıyorum ve daha sonra döngü devam ediyor ve sonraki grafik beliriyor.python ve matplotlib içinde güncelleme şekli

Yapmak istediğim şekil kapatmak ve döngüyü devam ettirmek için bir tuşa basma olayını bağlayabilmektir (fareyi şekilden "X" yerine kullanmak yerine).

Eğer bu mümkün değilse, rakamı kapatmak ve döngüye devam etmek için bir zamanlayıcı ayarlamak istiyorum.

Tüm sorunlarım, plt.show() öğesinin her şeyi engellemesi gerçeği ile ilgileniyor gibi görünüyor.

Haritalarımdaki bazı notlar: Aynı eksenleri kullanırlar, ancak bir dağılım grafiği, doldurma kutuları ve ek açıklamalar içerirler - bunlar her zaman değişmektedir.

Teşekkürler!

cevap

4

matplotlib.pyplot den ion kullanmayı deneyin:

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

diğer bilgiler hakkında ion ve bir geri arama atamak düğme baskı yaklaşımıyla gitmek isterseniz Alternatif here

kullanım etkileşimli olmayan vs interaktif

def moveon(event): 
    pp.close() 

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

Bir olay zamanlayıcısı daha zor çünkü show komutu engelleniyor, bu yüzden muhtemelen iş parçacığı içermelidir.

+1

Bu harika bir cevaptır. Ek olarak, daha fazla kontrol ve gereken şekilde güncelleme yeteneği sunan PyQT gibi bir GUI'ye koyabilirsiniz. – TimothyAWiseman

+0

Bu benim için çalışmadı. Tam olarak aynı kodu kullandım ve garip şeyler oldu. Olanlar, bütün rakamların ardışık olarak açılmasıydı (basmadım ve düğmeler yapmadım) ve onlar içinde hiçbir şey yoktu. Ayrıca, "Yanıt Vermiyor" ifadesi ortaya çıktı ve pythonumu kapattı. Pp.ion() sorunlara neden oluyor gibi görünüyor. Yardım et?? – mcfly

+0

@mcfly: 'ion()' seçenekleri, yürütmenin duraklatılmayacağı anlamına gelir - varolan grafiği her defasında değiştirmek isterseniz, yalnızca bir kez "şekil" olarak adlandırın. – jmetz