วิธีการตั้งค่าหัวเรื่องหลักเดียวที่อยู่เหนือแผนการย่อยทั้งหมดด้วย Pyplot ได้อย่างไร


219

pyplotฉันใช้ ฉันมี 4 แผนการย่อย วิธีการตั้งค่าชื่อหลักเดียวข้างต้นย่อยทั้งหมดหรือไม่ title()ตั้งไว้เหนือแผนย่อยสุดท้าย

คำตอบ:


283

ใช้pyplot.suptitleหรือFigure.suptitle:

import matplotlib.pyplot as plt
import numpy as np

fig=plt.figure()
data=np.arange(900).reshape((30,30))
for i in range(1,5):
    ax=fig.add_subplot(2,2,i)        
    ax.imshow(data)

fig.suptitle('Main title') # or plt.suptitle('Main title')
plt.show()

ป้อนคำอธิบายรูปภาพที่นี่


1
suptitleทำงานร่วมกับ ถึงกระนั้นฉันเห็น "แฮ็คไร้ยางอายของคุณ" :)
Jakub M.

6
หมายเหตุมันเป็นและไม่ได้plt.suptitle() plt.subtitle()ฉันไม่ได้ตระหนักถึงสิ่งนี้ในการเริ่มต้นและได้รับข้อผิดพลาดที่น่ารังเกียจ! : D
Dataman

127

บางจุดที่ฉันพบว่ามีประโยชน์เมื่อใช้สิ่งนี้กับแผนการของฉัน:

  • ฉันชอบความสอดคล้องของการใช้fig.suptitle(title)มากกว่าplt.suptitle(title)
  • เมื่อใช้fig.tight_layout()ชื่อเรื่องจะต้องเปลี่ยนด้วยfig.subplots_adjust(top=0.88)
  • ดูคำตอบด้านล่างเกี่ยวกับแบบอักษร

โค้ดตัวอย่างที่นำมาจากการสาธิตย่อยใน matplotlib เอกสารและปรับด้วยชื่อต้นแบบ

พล็อต 4x4 ที่ดี

import matplotlib.pyplot as plt
import numpy as np

# Simple data to display in various forms
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)

fig, axarr = plt.subplots(2, 2)
fig.suptitle("This Main Title is Nicely Formatted", fontsize=16)

axarr[0, 0].plot(x, y)
axarr[0, 0].set_title('Axis [0,0] Subtitle')
axarr[0, 1].scatter(x, y)
axarr[0, 1].set_title('Axis [0,1] Subtitle')
axarr[1, 0].plot(x, y ** 2)
axarr[1, 0].set_title('Axis [1,0] Subtitle')
axarr[1, 1].scatter(x, y ** 2)
axarr[1, 1].set_title('Axis [1,1] Subtitle')

# # Fine-tune figure; hide x ticks for top plots and y ticks for right plots
plt.setp([a.get_xticklabels() for a in axarr[0, :]], visible=False)
plt.setp([a.get_yticklabels() for a in axarr[:, 1]], visible=False)

# Tight layout often produces nice results
# but requires the title to be spaced accordingly
fig.tight_layout()
fig.subplots_adjust(top=0.88)

plt.show()

2
การเพิ่มเพียงอย่างเดียวfigure.suptitle()นั้นไม่เพียงพอเนื่องจากชื่อเรื่องของ subplots จะผสมกับ suptitile fig.subplots_adjust(top=0.88)ก็ดี
GoingMyWay

43

หากแผนการย่อยของคุณมีชื่อเรื่องด้วยคุณอาจต้องปรับขนาดหัวเรื่องหลัก:

plt.suptitle("Main Title", size=16)

การเปลี่ยนขนาดตัวอักษรทำให้ดีขึ้นมาก ขอบคุณ!
กระทะ

8
ในหลาม 2.7 มันเป็นFontSizeแทนขนาด plt.suptitle("Main Title", fontsize=16)
Temak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.