สิ่งหนึ่งที่คุณสามารถเปลี่ยนรหัสได้อย่างง่ายดายคือ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
kwarg สำหรับปัญหาของคุณรหัสกลายเป็น:
ใช้ GridSpec
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]