Bagaimana cara menetapkan judul utama tunggal di atas semua subplot dengan Pyplot?

219

Saya menggunakan pyplot. Saya punya 4 subplot. Bagaimana cara menetapkan judul utama tunggal di atas semua subplot? title()atur di atas subplot terakhir.

Jakub M.
sumber

Jawaban:

283

Gunakan pyplot.suptitleatau 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()

masukkan deskripsi gambar di sini

unutbu
sumber
1
Bekerja dengan suptitle. Namun, saya melihat "retas tanpa malu!" :)
Jakub M.
6
Catatan, ini plt.suptitle()dan tidak plt.subtitle(). Saya tidak menyadari ini pada awalnya dan mendapat kesalahan yang buruk! : D
Dataman
127

Beberapa poin yang saya temukan berguna ketika menerapkan ini pada plot saya sendiri:

  • Saya lebih suka konsistensi menggunakan fig.suptitle(title)daripadaplt.suptitle(title)
  • Saat menggunakan fig.tight_layout()judul harus bergeser denganfig.subplots_adjust(top=0.88)
  • Lihat jawaban di bawah ini tentang ukuran font

Contoh kode diambil dari demo subplot dalam dokumen matplotlib dan disesuaikan dengan judul master.

Plot 4x4 yang bagus

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()
Alexander McFarlane
sumber
2
Cukup menambahkan figure.suptitle()tidak cukup karena judul subplot akan bercampur dengan suptitile, fig.subplots_adjust(top=0.88)itu bagus.
GoingMyWay
43

Jika subplot Anda juga memiliki judul, Anda mungkin perlu menyesuaikan ukuran judul utama:

plt.suptitle("Main Title", size=16)
pentandrous
sumber
Mengubah ukuran font membuatnya jauh lebih baik. Terima kasih!
Wok
8
Dalam python 2.7 itu adalah ukuran font bukan ukuran . plt.suptitle("Main Title", fontsize=16)
Temak