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.

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


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()

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)

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.