Làm cách nào để đặt một tiêu đề chính duy nhất trên tất cả các ô phụ với Pyplot?


219

Tôi đang sử dụng pyplot. Tôi có 4 ô phụ. Làm cách nào để đặt một tiêu đề chính duy nhất trên tất cả các ô phụ? title()đặt nó ở trên subplot cuối cùng.

Câu trả lời:


283

Sử dụng pyplot.suptitlehoặc 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()

nhập mô tả hình ảnh ở đây


1
Làm việc với suptitle. Tuy nhiên, tôi thấy "hack không biết xấu hổ!" :)
Jakub M.

6
Lưu ý, nó là plt.suptitle()và không plt.subtitle(). Tôi đã không nhận ra điều này ngay từ đầu và đã có một lỗi khó chịu! : D
Dataman

127

Một vài điểm tôi thấy hữu ích khi áp dụng điều này vào các ô riêng của mình:

  • Tôi thích sự nhất quán của việc sử dụng fig.suptitle(title)hơn làplt.suptitle(title)
  • Khi sử dụng fig.tight_layout()tiêu đề phải được thay đổi vớifig.subplots_adjust(top=0.88)
  • Xem câu trả lời dưới đây về phông chữ

Mã ví dụ được lấy từ bản demo phụ trong tài liệu matplotlib và được điều chỉnh với tiêu đề chính.

Một cốt truyện đẹp

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
Đơn giản chỉ cần thêm figure.suptitle()là không đủ vì các tiêu đề của subplots sẽ trộn với suptitile, fig.subplots_adjust(top=0.88)là tốt.
Đi MYWay

43

Nếu các ô phụ của bạn cũng có tiêu đề, bạn có thể cần điều chỉnh kích thước tiêu đề chính:

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

Thay đổi kích thước phông chữ làm cho nó tốt hơn rất nhiều. Cảm ơn!
Chảo

8
Trong python 2.7, nó là phông chữ thay vì kích thước . plt.suptitle("Main Title", fontsize=16)
Temak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.