2010-08-16 24 views
6

matplotlib की साजिश और imshow का व्यवहार मुझे भ्रमित कर रहा है।matplotlib साजिश और imshow

import matplotlib as mpl 
import matplotlib.pyplot as plt 

अगर मैं फोन plt.show() कॉल plt.imshow (i) से पहले, तो एक त्रुटि का परिणाम है। अगर मैं plt.shshow (i) को plt.show() को कॉल करने से पहले कॉल करता हूं, तो सब कुछ पूरी तरह से काम करता है। हालांकि, अगर मैं खोला गया पहला आंकड़ा बंद करता हूं, और फिर plt.imshow (i) को कॉल करता हूं, तो एक नया आंकड़ा कभी भी plt.show() को कॉल किए बिना प्रदर्शित होता है।

क्या कोई इसे समझा सकता है?

उत्तर

14

अगर मैं फोन plt.show() plt.imshow (i) बुला से पहले, तो एक त्रुटि का परिणाम है। अगर मैं plt.imshow (i) से पहले plt.show() को कॉल करता हूं, तो सबकुछ पूरी तरह से काम करता है।

plt.show() आंकड़ा प्रदर्शित करता है (और जो भी गुई बैकएंड आप उपयोग कर रहे हैं उसका मुख्य भाग दर्ज करता है)। जब तक आप चीजों को प्लॉट नहीं करते हैं और उन्हें प्रदर्शित करना चाहते हैं, तब तक आपको इसे कॉल नहीं करना चाहिए।

plt.imshow() वर्तमान आंकड़े पर एक छवि खींचता है (एक आंकड़ा बनाना वर्तमान आंकड़ा नहीं है)। कुछ भी खींचा जाने से पहले plt.show() पर कॉल करना कोई समझ नहीं आता है। यदि आप अन्वेषण से एक नया आंकड़ा बनाना चाहते हैं, तो plt.figure() का उपयोग करें।

... एक नया आंकड़ा कभी भी कॉलिंग plt.show() के बिना प्रदर्शित होता है।

कि जब तक आप IPython के pylab मोड, जहां जीयूआई बैकएंड के mainloop एक अलग धागे में चलेंगे, जो करने के लिए कुछ इसी तरह के कोड चला रहे हैं नहीं होगा ...

सामान्य शब्दों में, plt। शो() आपकी लिपि की आखिरी पंक्ति होगी। (या जब भी आप रोकना चाहते हैं और किसी भी दर पर आपके द्वारा बनाई गई साजिश को विज़ुअलाइज़ करना चाहते हैं।)

उम्मीद है कि कुछ और समझ में आता है।

+2

यदि आप छवियों का अनुक्रम प्रदर्शित करना चाहते हैं, तो स्क्रीन पर प्रत्येक को प्रदर्शित करने के लिए संक्षिप्त रूप से रुकने, फिर अगली छवि पर जाने के लिए आप क्या करते हैं? आपको किसी बिंदु पर शो() को कॉल करना होगा, लेकिन यदि आप करते हैं, तो आप अगली छवि को प्रदर्शित करने के लिए शेष कोड निष्पादित नहीं कर सकते हैं। – ely

+0

बस एक नया आंकड़ा plt.figure() शुरू करें, या पिछले एक plt.close() को बंद करें। – j13r

संबंधित मुद्दे