2016-03-08 5 views
5

मेरे वर्तमान iPython में, matplotlib प्लॉट इनलाइन प्रदर्शित किए जा रहे हैं। मैं विशिष्ट पिक्सेल आकार के साथ छवियों को प्रदर्शित करने का एक तरीका चाहता था, क्योंकि मैं आमतौर पर केवल पिक्सल के साथ काम करता हूं और मैं कुछ भी प्रिंट नहीं करता हूं।आईपीथन और इनलाइन मैटलप्लॉब चित्रा आकार

मेरे स्क्रीन पीपीआई 208 है, इसलिए मैं कोड के इन 2 टुकड़े भाग गया:

plt.figure(figsize=(2000/float(208), 1000/float(208)), dpi=208) 
# other code here... 
plt.savefig('my_fig.png', dpi=208) 

क्या मैं लेकर संदेह में हूँ यह है: 1000 पिक्सेल द्वारा 2000 पिक्सेल जब मैं my_fig.png की जांच, यह वास्तव में है, यह वही चीज है जो मैं चाहता हूं। https://stackoverflow.com/a/7912007/582917 के अनुसार डिस्प्ले डिवाइस को प्रस्तुत करने और फ़ाइल को प्रतिपादित करने के लिए डीपीआई सेटिंग्स अलग-अलग डिफ़ॉल्ट हैं। यही कारण है कि मुझे में plt.savefig फ़ंक्शन में भी जोड़ना होगा।

हालांकि ब्राउज़र में आईपथन नोटबुक पर प्रदान की गई छवि बहुत छोटी है। मेरे ब्राउज़र शासक का उपयोग करके, यह लगभग 600 से 300 पिक्सेल है।

दोनों कार्यों के लिए एक ही डीपीआई का उपयोग करना, आईपीथन नोटबुक में इनलाइन रेंडर छवि इतनी छोटी क्यों है, जबकि मेरी सहेजी गई छवि सही समाधान पर है जो मैं चाहता हूं?

ध्यान दें कि मैं वर्चुअलबॉक्स में iPython चला रहा हूं (यह भी मुखर है), मुझे यकीन नहीं है कि इससे कोई अंतर हो सकता है।

कुछ परीक्षण और त्रुटियों के बाद, इनलाइन प्रतिपादन के लिए सही आकार को बंद करने के लिए, आंकड़ा डीपीआई 58 होना आवश्यक था। लेकिन फिर भी इनलाइन जेनरेट की गई छवियां मेरी निर्दिष्ट पिक्सेल गणना के साथ मेल नहीं खाती हैं। यह हमेशा + - 10 से 20 पिक्सेल है।

+0

कर आप एक ही स्क्रीन संकल्प/VM पर परिभाषा है? – pltrdy

+0

वीएम हेडलेस है। – CMCDragonkai

उत्तर

0

यह इस तथ्य के कारण हो सकता है कि %matplotlib inline डिफ़ॉल्ट रूप से bbox_inches='tight' से plt.figure(...) पास हो जाएगा। निम्नलिखित का प्रयास करें,

%matplotlib inline कॉल करने के बाद, %config InlineBackend.print_figure_kwargs = {'bbox_inches':None} तो अपने भूखंड बना सकता हूँ। यहां बताया गया है कि यह मेरे लिए किया था है:

पहले Before

बाद After

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