2012-07-13 9 views
7

से शो() और क्लोज़() का उपयोग करके मुझे matplotlib के साथ कुछ समस्याएं आ रही हैं .... मैं शो() के साथ एक छवि प्रदर्शित करने के लिए एक बार में 2 विंडो नहीं खोल सकता, ऐसा लगता है कि स्क्रिप्ट स्टॉप पर रुकती है लाइन मैं शो का उपयोग करता हूं और तब तक जारी नहीं रहता जब तक कि मैं मैन्युअल रूप से डिस्प्ले बंद नहीं करता। क्या स्क्रिप के भीतर आकृति विंडो को बंद करने का कोई तरीका है?matplotlib

निम्न कोड के रूप में मैं चाहता हूँ नहीं चलता है:

import matplotlib.pyplot as plt 
from time import sleep 
from scipy import eye 

plt.imshow(eye(3)) 
plt.show() 
sleep(1) 
plt.close() 
plt.imshow(eye(2)) 
plt.show() 

मैं पहली बार खिड़की की उम्मीद 1 सेकंड के बाद बंद कर दें और फिर दूसरी खोलने के लिए, लेकिन खिड़की बंद नहीं करता है जब तक मैं इसे बंद खुद। क्या मैं कुछ गलत कर रहा हूं, या क्या यह ऐसा होना चाहिए?

+0

संभावित डुप्लिकेट। Http://stackoverflow.com/q/9753885/302369 – imsc

+0

वास्तव में इस समस्या को हल करता है, लेकिन मुझे एक और मिलता है ..... जब मैं plt.ion() का उपयोग करता हूं तो मैं कुछ संसाधनों का उपयोग नहीं कर सकता जैसे कि ज़ूम में आकृति खिड़की (मैं खिड़की को चारों ओर भी नहीं ले जा सकता) ... – xarles

उत्तर

11

plt.show() फ़ंक्शन को अवरुद्ध कर रहा है।

अनिवार्य रूप से, यदि आप एक बार में दो विंडो खोलना चाहते हैं, तो आपको दो आंकड़े बनाने की आवश्यकता है, और फिर उन्हें प्रदर्शित करने के लिए अंत में plt.show() का उपयोग करें। वास्तव में, अंगूठे का एक सामान्य नियम यह है कि आप अपने भूखंड स्थापित करते हैं, और plt.show() आपके द्वारा की जाने वाली आखिरी चीज है।

तो आपके मामले में:

fig1 = plt.figure(figsize=plt.figaspect(0.75)) 
ax1 = fig1.add_subplot(1, 1, 1) 
im1, = plt.imshow(eye(3)) 

fig2 = plt.figure(figsize=plt.figaspect(0.75)) 
ax2 = fig2.add_subplot(1, 1, 1) 
im2, = plt.imshow(eye(2)) 

plt.show() 

आप axes(ax2) का उपयोग कर भूखंडों के बीच स्विच कर सकते हैं। https://stackoverflow.com/a/11141305/1427975:

मैं एक व्यापक उदाहरण का प्रदर्शन क्यों भूखंड समारोह अवरुद्ध है और कैसे यह एक और प्रश्न का उत्तर में इस्तेमाल किया जा सकता है एक साथ रखा।

+0

धन्यवाद, महोदय। लेकिन मेरी लिपि में, मैं 100 प्लॉट्स को एक-एक करके प्रदर्शित करने की कोशिश कर रहा हूं। मैं शायद अंत में plt.show() को चुनने का चयन नहीं करूंगा। मैं एक साजिश दिखाना चाहता हूं, शायद 1 सेकंड के लिए रुक गया, फिर इसे मैन्युअल रूप से बंद करने के बजाय स्वचालित रूप से स्क्रिप्ट में बंद करें, फिर 100 बार के लिए बार-बार दिखाएं। क्या ऐसा करने के लिए वैसे भी है? संपादित करें: मैंने सब कुछ के शीर्ष पर plt.ion() की कोशिश की। हां, भूखंड दिखाई देते हैं और एक-एक करके बंद हो जाते हैं। हालांकि, आकृति खिड़की, सभी सफेद पर कुछ भी नहीं दिखाई देता है। – StayFoolish

1

मैं PyScripter और अजगर 2.7 का उपयोग करें और यह भी सभी सज़ाएँ अवरुद्ध जब तक आप मैन्युअल रूप से आंकड़े बंद plt.show() की समस्या थी।

मैंने पाया कि पाइथन इंजन को 'रिमोट (डब्ल्यूएक्स)' में बदलने से स्क्रिप्ट को plt.show() के बाद चलाया जा सकता है - इसलिए plt.close() के साथ आंकड़े बंद कर सकते हैं।