2012-08-01 20 views
6

में अद्यतन आंकड़ा मैंने SO पर एक खोज की है लेकिन मुझे मेरी समस्या का सही "समाधान" नहीं मिला है। मैं कुछ डेटा पर एक लूप चला रहा हूं जिसे मैं साजिश करना चाहता हूं। लूप के प्रत्येक चरण में - मैं plt.show() के साथ आकृति प्लॉट करता हूं। हालांकि, चूंकि यह एक अवरुद्ध कार्य है, मैं तब तक फंस गया हूं जब तक कि मैं खिड़की को मैन्युअल रूप से बंद नहीं करता और फिर लूप जारी रहता है और अगली साजिश दिखाई देती है।पायथन और matplotlib

मैं क्या करना चाहता हूं, आकृति को बंद करने के लिए एक महत्वपूर्ण प्रेस ईवेंट बांधने और लूप को जारी रखने में सक्षम होना चाहिए (माउस को "एक्स" से बाहर निकालने के बजाय)।

यदि यह संभव नहीं है, तो मैं आकृति को बंद करने और लूप जारी रखने के लिए टाइमर सेट करना चाहता हूं।

मेरे सभी मुद्दे इस तथ्य से निपटने लगते हैं कि plt.show() अन्य सभी को अवरुद्ध कर रहा है - इसके आसपास किसी भी तरह से?

मेरे भूखंडों पर कुछ नोट्स: वे एक ही अक्ष का उपयोग करते हैं, लेकिन एक स्कैटर प्लॉट, भरने के बक्से, और एनोटेशन - जो हमेशा बदल रहे होते हैं।

धन्यवाद!

उत्तर

4

matplotlib.pyplot से ion उपयोग करके देखें:

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

अधिक जानकारी ion के बारे में और इंटरैक्टिव बनाम गैर-सहभागी उपयोग here

वैकल्पिक रूप से आप एक कॉलबैक आवंटित बटन प्रेस दृष्टिकोण के साथ जाना चाहते हैं, तो

def moveon(event): 
    pp.close() 

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

एक ईवेंट टाइमर अधिक मुश्किल है क्योंकि show कमांड अवरुद्ध है, इसलिए शायद इसे थ्रेडिंग शामिल करना होगा।

+1

यह एक अच्छा जवाब है। इसके अतिरिक्त, आप इसे पीयूक्यूटी जैसे कुछ के साथ जीयूआई में डाल सकते हैं जो आपको अधिक नियंत्रण और आवश्यकतानुसार अपडेट करने की क्षमता देता है। – TimothyAWiseman

+0

यह मेरे लिए काम नहीं किया। मैंने प्रदान किए गए सटीक कोड का उपयोग किया और अजीब चीजें होती हैं। क्या हुआ था कि सभी आंकड़े लगातार खोले गए थे (मैंने प्रेस नहीं किया था और बटन) और उनके पास कुछ भी नहीं था। इसके अलावा, "प्रतिक्रिया नहीं दे रहा" दिखाया गया और मेरे अजगर को बंद कर दिया। पीपीओयन() मुद्दों का कारण प्रतीत होता है। मदद?? – mcfly

+0

@mcfly: 'आयन() 'विकल्प का अर्थ है निष्पादन रोक नहीं देगा - यदि आप हर बार मौजूदा प्लॉट को प्रतिस्थापित करना चाहते हैं, तो केवल एक बार' आकृति 'को कॉल करें। – jmetz