स्पाइडर / आईपीथॉन / मैटलपोटलिब में मुझे फिर से इंटरएक्टिव प्लॉट कैसे मिलेंगे?


91

मैंने विंडोज 7 में पायथन (x, y) 2.7.2.3 से 2.7.6.0 तक अपग्रेड किया (और यह देखकर खुश था कि मैं आखिरकार function_name?ऑब्जेक्ट इंस्पेक्टर में फिर से टाइप कर सकता हूं और देख सकता हूं ) लेकिन अब प्लॉटिंग उतना काम नहीं करता है अभ्यस्त।

पहले (स्पाइडर 2.1.9, IPython 0.10.2, matplotlib 1.2.1), जब मैंने इस स्क्रिप्ट को प्लॉट किया था , उदाहरण के लिए, यह सब-प्लॉट्स को एक इंटरेक्टिव विंडो में साइड-प्लॉट करेगा:

यहां छवि विवरण दर्ज करें

अब (स्पाइडर 2.2.5, IPython 1.2.0, Matplotlib 1.3.1) जब मैं चीजों को प्लॉट करने की कोशिश करता हूं, तो यह सबप्लॉट्स को छोटे इनलाइन PNGs के रूप में करता है, जो कि IPython में बदलाव है :

छोटे इनलाइन पीएनजी

इसलिए मैं विकल्पों में गया और यह पाया:

ग्राफिक्स विकल्प

जो यह कहता है कि मुझे पुराने इंटरएक्टिव प्लॉट वापस मिल सकते हैं, 4 सबप्लॉट्स साथ-साथ दिखेंगे, लेकिन जब मैं "ऑटोमैटिक" स्विच करता हूं, और कुछ प्लॉट करने की कोशिश करता हूं, तो यह कुछ नहीं करता है। कोई भूखंड नहीं।

यदि मैं इस ड्रॉप-डाउन को Qt पर स्विच करता हूं, या "समर्थन को सक्रिय करें" को अनचेक करता हूं, तो यह केवल पहले सबप्लॉट या उसके हिस्से को प्लॉट करता है, और फिर बंद हो जाता है:

यहां छवि विवरण दर्ज करें

मैं एक ही आकृति में 4 साइड-बाय-साइड सबप्लॉट के पुराने व्यवहार को कैसे प्राप्त कर सकता हूं जिससे मैं बातचीत कर सकता हूं?


मुझे लगता है कि यह अजगर को बग रिपोर्ट के रूप में जाना चाहिए। मेरा भोला अनुमान है कि वे सभी प्लॉटिंग को संभालने के लिए पाइलट का इस्तेमाल कर रहे हैं और इसके लिए बट में काट रहे हैं (जो गलत लगता है, क्योंकि उनके पास अपना क्यूटी विजेट है)।
ताकसवेल

1
@tcaswell "वे" कौन हैं और वे पाइलट के बजाय क्या उपयोग करेंगे?
एंडोलिथ

1
क्या आप इस समस्या को पाइथोन्क्सी के बाहर दोहरा सकते हैं (सिर्फ सीधे आईपाइथन + क्यूटनकोस का उपयोग करके)? क्या गलत हो रहा है, इसे सुलझाने के लिए यहां पर्याप्त जानकारी नहीं है।
ताकसवेल

1
मुझे लगता है कि यह स्पाइडर में एक बग है (स्पाइडर आईडीई है, पाइथोनेक्सी वितरण है)।
थॉमस के

1
@ तस्कसवेल: अहा। ऐसा लगता है कि मेरी स्क्रिप्ट matplotlib त्रुटियों का उत्पादन कर रही है जो तब IPython कंसोल के अलावा कहीं और भेजी जाती हैं। यदि मैं इसके बजाय Qt कंसोल का उपयोग करता हूं, तो वे दिखाते हैं, और अब जब मैं इसकी तलाश करता हूं, तो वे स्पाइडर के नियमित कंसोल टैब में दिखाई देते हैं। यदि मैं अधिक सरल स्क्रिप्ट बनाता हूं, तो यह काम करता है, चाहे राज्य मशीन या वस्तु-उन्मुख। मैंने मान लिया कि नई इनलाइन भूखंडों के कारण मुझे कुछ IPython सेटिंग्स बदलनी पड़ीं।
एंडोमिथ

जवाबों:


134

बैकएंड को स्वचालित में बदलें:

उपकरण> प्राथमिकताएं> आईपीथॉन कंसोल> ग्राफिक्स> ग्राफिक्स बैकएंड> बैकएंड: स्वचालित

फिर बंद करें और स्पाइडर खोलें।


27
समापन और उद्घाटन वास्तव में आवश्यक है। बस सोच रहा था कि यह डिफ़ॉल्ट मान क्यों नहीं है।
मथियास 711

5
इसके अलावा, किसी के लिए अभी भी अपने भूखंडों को नहीं देख रहा है (जैसे मैं नहीं था), भूखंड की खिड़की चुपचाप दिखाई दे सकती है_हिंदी_ आपकी कंसोल विंडो (कम से कम यह विंडोज़ 10 पर स्पाइडर में होती है) ताकि आपको अपनी खिड़की के लिए शिकार करना पड़े।
19-29 में जोशुआ ग्लेज़र

3
इसे खोजने में परेशानी वाले लोगों के लिए, यह पर स्थित हैpython > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
कैमरूनोयट्रायलर

6
स्पाइडर को पुनरारंभ करने के बजाय आप केवल कर्नेल (या तो कंसोल में सेटिंग व्हील पर क्लिक करके और फिर "रीस्टार्ट कर्नेल" या कीबोर्ड शॉर्टकट के माध्यम से मैक मैक पर +) को पुनः आरंभ कर सकते हैं
माइकल

मुझे पता नहीं क्यों, लेकिन स्वचालित में बदलते हुए, स्पाइडर को पुनरारंभ करना, फिर इनलाइन पर वापस बदलना इनलाइन भूखंडों का कारण बनता है जब भी मैं एक लूप में एक इनपुट कमांड जारी करता हूं, तो यह प्रदर्शित करना शुरू कर देता है। यह बहुत मददगार है!
जोशिया योदर

50

अंतर्निहित मैजिक कमांड टाइप करके आप इसे जल्दी से नियंत्रित कर सकते हैंस्पाइडर के आईपीथॉन कंसोल , जो मुझे प्राथमिकता मेनू से इन्हें लेने से तेज लगता है। स्पाइडर या कर्नेल को पुनरारंभ करने की आवश्यकता के बिना, परिवर्तन तत्काल प्रभाव लेते हैं।

"स्वचालित" (यानी इंटरैक्टिव) भूखंडों पर जाने के लिए, टाइप करें:

%matplotlib auto

फिर यदि आप "इनलाइन" पर वापस जाना चाहते हैं, तो इसे टाइप करें:

%matplotlib inline

(नोट: ये आदेश गैर-आइपीथॉन कंसोल में काम नहीं करते हैं)

इस विषय पर अधिक पृष्ठभूमि देखें: "% matplotlib इनलाइन" का उद्देश्य


अजगर 3.6 में, मैं प्राप्तmatplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
कार्लो

2
@ करलो कि त्रुटि पारंपरिक "अजगर" दुभाषिया से अपेक्षित है। यह सिंटैक्स केवल ipython या Spyder के साथ मान्य है।
माइक टी

ठीक है, मैं इसे स्पाइडर में इस्तेमाल कर रहा था लेकिन पायथन कंसोल में। दरअसल, यह IPython कंसोल में काम करता है।
कार्लो

3
क्या स्क्रिप्ट का उपयोग करके इसे सेट करने का कोई तरीका है? एक स्क्रिप्ट के भीतर ग्राफ का आउटपुट कहां है? धन्यवाद।
रॉय

1
यह स्पाइडर में काम नहीं करता प्रतीत होता है, भले ही यह एक सामान्य आईपीथॉन विंडो में ऐसा करने का तरीका हो। मेनू वरीयताओं का उपयोग करते हुए मेरे लिए काम किया; यकीन नहीं होता कि ऐसा क्यों नहीं होता।
कछुए

10

लागू करने के बाद: उपकरण> वरीयताएँ> ग्राफिक्स> बैकएंड> स्वचालित कर्नेल को पुनः आरंभ करें यहां छवि विवरण दर्ज करें

और आपको इंटरएक्टिव प्लॉट जरूर मिलेगा। हैप्पी कोडिंग!


5

जैसा कि टिप्पणियों में कहा गया है, समस्या आपकी स्क्रिप्ट में निहित है। दरअसल, 2 समस्याएं हैं:

  • एक matplotlib त्रुटि है, मुझे लगता है कि आप एक तर्क के रूप में पारित कर रहे हैं None कहीं न कहीं । हो सकता है कि चूक के कारण?
  • आप show()प्रत्येक सबप्लॉट के बाद कॉल करें । show()आपकी स्क्रिप्ट के अंत में एक बार कॉल किया जाना चाहिए। विकल्प इंटरएक्टिव मोड का उपयोग करने के लिए है, ionmatplotlib के दस्तावेज में देखें।

2

यह वास्तव में तय करना बहुत आसान है और कोई कोडिंग नहीं लेता है:

1. कंसोल के ऊपर प्लॉट टैब पर क्लिक करें। 2. जब प्लॉट स्क्रीन के ऊपरी दाएं कोने पर विकल्प बटन पर क्लिक करें। 3. तेजी से "म्यूट इनलाइन प्लॉटिंग" बटन को अनचेक करें

अब अपनी स्क्रिप्ट को फिर से चलाएं और आपके ग्राफ़ को कंसोल में दिखना चाहिए।

चीयर्स।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.