एक चीज जिसे आप अपने कोड में बहुत आसानी से बदल सकते हैं, वह यह है कि fontsize
आप शीर्षकों के लिए उपयोग कर रहे हैं। हालाँकि, मैं मान रहा हूँ कि आप ऐसा नहीं करना चाहते हैं!
उपयोग करने के लिए कुछ विकल्प fig.subplots_adjust(top=0.85)
:
आमतौर पर tight_layout()
पर अच्छे स्थानों में सब कुछ स्थिति में एक बहुत अच्छा काम करता है ताकि वे ओवरलैप न हों। कारण tight_layout()
इस मामले में मदद नहीं करता है क्योंकि tight_layout()
खाते में fig.suptitle () नहीं लेता है। GitHub पर इस बारे में एक खुला समस्या है: https://github.com/matplotlib/matplotlib/issues/829 [वजह से एक पूर्ण ज्यामिति प्रबंधक की आवश्यकता होती है करने के लिए 2014 में बंद कर दिया गया - में स्थानांतरित कर दिया https://github.com/matplotlib/matplotlib / मुद्दों / 1109 ]।
यदि आप थ्रेड पढ़ते हैं, तो आपकी समस्या का समाधान है GridSpec
। कुंजी काग के tight_layout
उपयोग से, कॉल करते समय आंकड़े के शीर्ष पर कुछ जगह छोड़ना है rect
। आपकी समस्या के लिए, कोड बन जाता है:
ग्रिडस्पेक का उपयोग करना
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
f = np.random.random(100)
g = np.random.random(100)
fig = plt.figure(1)
gs1 = gridspec.GridSpec(1, 2)
ax_list = [fig.add_subplot(ss) for ss in gs1]
ax_list[0].plot(f)
ax_list[0].set_title('Very Long Title 1', fontsize=20)
ax_list[1].plot(g)
ax_list[1].set_title('Very Long Title 2', fontsize=20)
fig.suptitle('Long Suptitle', fontsize=24)
gs1.tight_layout(fig, rect=[0, 0.03, 1, 0.95])
plt.show()
परिणाम:
हो सकता GridSpec
है कि यह आपके लिए थोड़ा अधिक कठिन हो, या आपकी वास्तविक समस्या में बहुत बड़े कैनवास, या अन्य जटिलताओं पर कई और अधिक सबप्लॉट शामिल होंगे। एक साधारण हैक सिर्फ नकल annotate()
करने के 'figure fraction'
लिए निर्देशांक का उपयोग और लॉक करना हैsuptitle
। हालाँकि आउटपुट पर एक नज़र डालने पर आपको कुछ बेहतर समायोजन करने की आवश्यकता हो सकती है। ध्यान दें कि यह दूसरा समाधान उपयोग नहीं करता है tight_layout()
।
सरल उपाय (हालांकि ठीक होने की आवश्यकता हो सकती है)
fig = plt.figure(2)
ax1 = plt.subplot(121)
ax1.plot(f)
ax1.set_title('Very Long Title 1', fontsize=20)
ax2 = plt.subplot(122)
ax2.plot(g)
ax2.set_title('Very Long Title 2', fontsize=20)
# fig.suptitle('Long Suptitle', fontsize=24)
# Instead, do a hack by annotating the first axes with the desired
# string and set the positioning to 'figure fraction'.
fig.get_axes()[0].annotate('Long Suptitle', (0.5, 0.95),
xycoords='figure fraction', ha='center',
fontsize=24
)
plt.show()
परिणाम:
[ Python
2.7.3 (64-बिट) और matplotlib
1.2.0 का उपयोग करना ]