पायथन मैटलपोटलिब फिगर टाइटल ट्विन का उपयोग करते समय कुल्हाड़ियों के लेबल को ओवरलैप करता है


139

मैं एक ही ग्राफ पर दो अलग-अलग मात्राओं को ट्विन का उपयोग करके प्लॉट करने की कोशिश कर रहा हूं:

fig = figure()
ax = fig.add_subplot(111)
ax.plot(T, r, 'b-', T, R, 'r-', T, r_geo, 'g-')
ax.set_yscale('log')
ax.annotate('Approx. sea level', xy=(Planet.T_day*1.3,(Planet.R)/1000), xytext=(Planet.T_day*1.3, Planet.R/1000))
ax.annotate('Geostat. orbit', xy=(Planet.T_day*1.3, r_geo[0]), xytext=(Planet.T_day*1.3, r_geo[0]))
ax.set_xlabel('Rotational period (hrs)')
ax.set_ylabel('Orbital radius (km), logarithmic')
ax.set_title('Orbital charts for ' + Planet.N, horizontalalignment='center', verticalalignment='top')


ax2 = ax.twiny()
ax2.plot(v,r,'k-')
ax2.set_xlabel('Linear speed (ms-1)')

show()

और डेटा ठीक प्रस्तुत किया गया है, लेकिन मुझे समस्या है कि आंकड़ा शीर्षक माध्यमिक एक्स अक्ष पर एक्सिस लेबल के साथ अतिव्यापी है ताकि यह मुश्किल से सुपाठ्य हो (मैं यहां एक चित्र उदाहरण पोस्ट करना चाहता था, लेकिन मेरे पास नहीं है उच्च पर्याप्त प्रतिनिधि अभी तक)।

मैं यह जानना चाहता हूं कि क्या सीधे शीर्षक को कुछ दसियों पिक्सेल में स्थानांतरित करने का एक सीधा तरीका है, ताकि चार्ट पहले से दिखाई दे।


1
ढेर अतिप्रवाह में आपका स्वागत है! यदि आप अपनी तस्वीर की imgur पोस्टिंग से लिंक करते हैं तो एक उच्च प्रतिनिधि उपयोगकर्ता आपके लिए अपनी पोस्ट में छवि एम्बेड करेगा।
हुक

@ दुखद - क्या आप पुनर्विचार करेंगे कि इस प्रश्न के लिए क्या उत्तर दिया जाए? Matplotlib ने इस सटीक ज़रूरत (नीचे सबसे अधिक वोट किए गए उत्तर) को संभालने के लिए एक अंतर्निहित तंत्र जोड़ा है
Amelio Vazquez-Reina

जवाबों:


243

मुझे यकीन नहीं है कि यह matplotlib के बाद के संस्करणों में एक नई विशेषता है, लेकिन कम से कम 1.3.1 के लिए, यह बस है:

plt.title(figure_title, y=1.08)

यह भी काम करता है plt.suptitle(), लेकिन (अभी तक) के लिए नहीं plt.xlabel(), आदि।


6
लेबल के लिए आप तर्क सेट कर सकते labelpadहैं, यहां देखें ।
फेलिक्स हॉफमैन

1
इसकी कीमत क्या है, यह कोई नई सुविधा नहीं है। बहुत लंबे समय के लिए titleलिया है xऔर yतर्क (जब तक मैं याद कर सकता हूं, किसी भी दर पर)।
जो किंगटन

3
plt.set_title ('शीर्षक स्ट्रिंग', y = 1.08) मेरे लिए काम करता है।
यू शेन

3
यह अधिक उपयोगी होगा यदि कोई व्यक्ति यह बताए कि 1.08 कौन सी इकाइयाँ हैं और क्या चूक हैं। मेरी समझ यह है कि डिफ़ॉल्ट 1 है
मानसिक

3
@ जॉनकोमिंग्स ऐसा लगता है कि डिफ़ॉल्ट मान y = 1 है और इकाइयां "कुल्हाड़ी अंश" है, अर्थात, y = 0.5 का अर्थ है कि शीर्षक कुल्हाड़ियों के बीच में है, और y = 0 का अर्थ है कि शीर्षक नीचे के ठीक ऊपर है। कुल्हाड़ियों।
herrlich10

33

plt.titleटेक्स्ट का उपयोग करना भूल जाएं और सीधे साथ रखें plt.text। एक अतिरंजित उदाहरण नीचे दिया गया है:

import pylab as plt

fig = plt.figure(figsize=(5,10))

figure_title = "Normal title"
ax1  = plt.subplot(1,2,1)

plt.title(figure_title, fontsize = 20)
plt.plot([1,2,3],[1,4,9])

figure_title = "Raised title"
ax2  = plt.subplot(1,2,2)

plt.text(0.5, 1.08, figure_title,
         horizontalalignment='center',
         fontsize=20,
         transform = ax2.transAxes)
plt.plot([1,2,3],[1,4,9])

plt.show()

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


@ user815423426 हां, tight_layoutअभी भी गैर-मानक प्लेसमेंट के साथ अच्छा नहीं लगता है। शायद आप बग रिपोर्ट कर सकते हैं?
हुक

2
जब मैंने अपने कथानक को फिगर.सैवफिग () का उपयोग करते हुए बचा लिया तो कम से कम कसकर उपयोग करते हुए मुझे एक काम मिल गया । यदि title = plt.title(...)आप विकल्प का उपयोग करके शीर्षक के चारों ओर प्लॉट को कसकर निर्दिष्ट कर सकते हैं bbox_extra_artists:figure.savefig(filename, bbox_extra_artists=(title), bbox_inches='tight')
junkaholik

10
ax.set_title('My Title\n', fontsize="15", color="red")
plt.imshow(myfile, origin="upper")

यदि आप '\n'अपने शीर्षक स्ट्रिंग के ठीक बाद रखते हैं, तो प्लॉट शीर्षक के ठीक नीचे खींचा जाता है। यह एक तेज़ समाधान भी हो सकता है।


8

मैं एक सबप्लॉट शीर्षक को ओवरलैप करने वाले एक्स-लेबल के साथ एक मुद्दा रहा था; यह मेरे लिए काम किया:

import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1)
ax[0].scatter(...)
ax[1].scatter(...)
plt.tight_layout()
.
.
.
plt.show()

इससे पहले

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

उपरांत

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

संदर्भ:


4

बस plt.tight_layout()पहले का उपयोग करें plt.show()। यह अच्छा काम करता है।


4

आप इस मामले के लिए पैड का उपयोग कर सकते हैं:

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