मेरे मैटलोट्लिब प्लॉट में एक्सलैब क्यों काट दिया जाता है?


302

मैं एक डेटासेट का उपयोग कर matplotlibरहा हूं, जहां मेरे पास एक xlabel है जो काफी "लंबा" है (यह TeX में प्रदान किया गया एक सूत्र है जिसमें एक अंश होता है और इसलिए इसमें पाठ की कुछ पंक्तियों के बराबर ऊँचाई होती है)।

किसी भी मामले में, जब मैं आंकड़े खींचता हूं तो सूत्र का निचला भाग हमेशा कट जाता है। आकृति का आकार बदलने से यह मदद नहीं लगती है, और मैं यह पता लगाने में सक्षम नहीं हुआ हूं कि एक्सलेबेल के लिए जगह बनाने के लिए एक्स-एक्सिस "अप" को कैसे स्थानांतरित किया जाए। ऐसा कुछ एक उचित अस्थायी समाधान होगा, लेकिन क्या अच्छा होगा कि matplotlib को स्वचालित रूप से पहचानने का एक तरीका होगा कि लेबल काट दिया जाए और तदनुसार आकार दें।

यहाँ एक उदाहरण है कि मेरा क्या मतलब है:

import matplotlib.pyplot as plt

plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()

जब आप पूरे यलैबेल को देख सकते हैं, तो नीचे की ओर ज़ेलेबल काट दिया जाता है।

इस मामले में यह एक मशीन-विशिष्ट समस्या है, मैं इसे matplotlib 1.0.0 के साथ OSX 10.6.8 पर चला रहा हूं


4
आप एक छवि होस्टिंग साइट पर पोस्ट कर सकते हैं और इसे यहां लिंक कर सकते हैं।
9

1
यह मदद करता है अगर आप एक न्यूनतम नमूना कोड पोस्ट कर सकते हैं जो इस मुद्दे को ट्रिगर करता है। इस तरह, लोग आपकी समस्या को तेजी से समझ और पुन: उत्पन्न कर सकते हैं, और वे आपकी सहायता करने की अधिक संभावना रखेंगे।
डेनिलसन सिया मिया

मेरी मशीन पर आपका कोड ठीक काम करता है (सूत्र पूरी तरह से दिखाई देता है) (ubuntu 11.04 64bit)। हो सकता है कि एक मशीन-विशिष्ट समस्या हो [चित्र में गलत आयामी जानकारी के साथ एक फ़ॉन्ट की तरह?]। आप शायद अपने सिस्टम का उपयोग अपने प्रश्न में कर सकते हैं।
मैक

9
आप भी कोशिश कर सकते हैं plt.savefig("test.png",bbox_inches='tight'): stackoverflow.com/questions/21288062/…
Yibo यांग

जवाबों:


473

उपयोग:

import matplotlib.pyplot as plt

plt.gcf().subplots_adjust(bottom=0.15)

लेबल के लिए जगह बनाने के लिए।

संपादित करें:

जब से मैंने जवाब दिया है, फ़ंक्शन matplotlibजोड़ दिया tight_layout()है। इसलिए मैं इसका उपयोग करने का सुझाव देता हूं:

plt.tight_layout()

xlabel के लिए जगह बनाना चाहिए।


141
मुझे यह बहुत अजीब लगता है कि किसी को एक भूखंड के आवश्यक हिस्से के लिए एक अतिरिक्त कॉल करने की आवश्यकता होगी। इसके पीछे क्या तर्क है?
एक अलग बेन

3
बस जिज्ञासा से बाहर, आप के gcf().subplots_adjustबजाय क्यों है plt.subplots_adjust? क्या कोई अंतर है?
जुनिपर-

49
क्या हैं gcfऔर gca? आपने समझाने की उपेक्षा की!
कर्नल पैनिक

12
मैं एक ही समस्या का सामना कर रहा था, और जब tight_layout()मैंने xlabels कटऑफ़ को ठीक किया, तो दुर्भाग्य से मेरे येलबेल को काट दिया गया (जो पहले काट नहीं किया गया था)। हालांकि, पहले उपाय ( subplots_adjust(bottom=0.25)) ने अच्छी तरह से काम किया। धन्यवाद।
स्कॉट एच।

17
@ColonelPanic gcf()और क्रमशः gca()"वर्तमान आंकड़ा प्राप्त करें" और "वर्तमान अक्ष प्राप्त करें" हैं।
DrMisha

150

एक आसान विकल्प है कि प्लॉट आकार को स्वचालित रूप से समायोजित करने के लिए मैटलोट्लिब को कॉन्फ़िगर करें। यह मेरे लिए पूरी तरह से काम करता है और मुझे यकीन नहीं है कि यह डिफ़ॉल्ट रूप से सक्रिय क्यों नहीं है।

विधि 1

इसे अपनी matplotlibrc फ़ाइल में सेट करें

figure.autolayout : True

Matplotlibrc फ़ाइल को अनुकूलित करने के बारे में अधिक जानकारी के लिए यहाँ देखें: http://matplotlib.org/users/customen.html

विधि 2

इस तरह रनटाइम के दौरान rcParams को अपडेट करें

from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})

इस दृष्टिकोण का उपयोग करने का लाभ यह है कि आपका कोड अलग-अलग कॉन्फ़िगर की गई मशीनों पर समान ग्राफ़ का उत्पादन करेगा।


इस विकल्प का उपयोग करते समय मुझे बहुत बड़े कलरबार के साथ कुछ समस्याएं थीं। एक संभावित समाधान पर यहां चर्चा की गई है: matplotlib.org/users/tight_layout_guide.html
PiQuer

2
जब मैं रिवाज (बड़ा!) को सेट करता हूं तो टाइट_आउटआउट चीजों की गड़बड़ी करता है। यह काफी बेहतर काम करता है।
बेनब

RcParams को अपडेट करना वास्तव में एकमात्र ऐसी चीज थी जो मेरे लिए काम करती थी जब LaTeX के साथ pgf बैकएंड का उपयोग करती थी। (हालांकि यह भूखंड को आयताकार बनाता है, जो मुझे बुरा नहीं लगता)
h4nek

केवल इसने मेरे लिए काम किया; कोई भी तंग_लेआउट या बॉक्स_इनचेस काम नहीं किया
zed111

106

यदि आप इसे किसी फ़ाइल में संग्रहीत करना चाहते हैं, तो आप इसे bbox_inches="tight"तर्क का उपयोग करके हल करते हैं:

plt.savefig('myfile.png', bbox_inches = "tight")

2
@ गुइडो ने दिन बचाया
pcko1

7

plot.tight_layout()ग्राफ पर सभी परिवर्तनों के बाद डालने से पहले show()या savefig()समस्या हल हो जाएगी।


1
यह भूखंड के नीचे के लिए जगह नहीं बनाता है, लेकिन यह पूरे भूखंड को बचाता है, जो कुछ मामलों में (जैसा कि मेरा) भूखंड को वास्तव में अजीब लग सकता है।
89f3a1c


5

आप अपने $HOME/.matplotlib/matplotlib_rcअनुसार निम्न प्रकार से कस्टम पैडिंग सेट कर सकते हैं । नीचे दिए गए उदाहरण में मैंने नीचे और बाएँ दोनों प्रकार के पैडिंग को संशोधित किया है:

# The figure subplot parameters.  All dimensions are a fraction of the
# figure width or height
figure.subplot.left  : 0.1 #left side of the subplots of the figure
#figure.subplot.right : 0.9 
figure.subplot.bottom : 0.15
...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.