Bagaimana cara menambahkan judul ke subplot di Matplotlib?

225

Saya memiliki satu angka yang berisi banyak subplot.

fig = plt.figure(num=None, figsize=(26, 12), dpi=80, facecolor='w', edgecolor='k')
fig.canvas.set_window_title('Window Title')

# Returns the Axes instance
ax = fig.add_subplot(311) 
ax2 = fig.add_subplot(312) 
ax3 = fig.add_subplot(313) 

Bagaimana saya menambahkan judul ke subplot?

fig.suptitlemenambahkan judul ke semua grafik dan meskipun ax.set_title()ada, yang terakhir tidak menambahkan judul apa pun ke subplot saya.

Terima kasih untuk bantuannya.

Edit: salah ketik yang dikoreksi set_title(). Terima kasih Rutger Kassies

Shailen
sumber

Jawaban:

201

ax.title.set_text('My Plot Title') tampaknya bekerja juga.

fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)
ax1.title.set_text('First Plot')
ax2.title.set_text('Second Plot')
ax3.title.set_text('Third Plot')
ax4.title.set_text('Fourth Plot')
plt.show()

matplotlib menambahkan judul pada subplot

Jarad
sumber
Bagi siapa pun yang memiliki masalah dengan ukuran font untuk histogram, anehnya mengurangi jumlah bin biarkan saya menambahnya. Pergi dari 500 hingga 100.
mLstudent33
Jika Anda harus dapat menentukan ukuran font, gunakan ax.set_title('title', fontsize=16)saja.
Tobias PG
234

ax.set_title() harus mengatur judul untuk sub-plot yang terpisah:

import matplotlib.pyplot as plt

if __name__ == "__main__":
    data = [1, 2, 3, 4, 5]

    fig = plt.figure()
    fig.suptitle("Title for whole figure", fontsize=16)
    ax = plt.subplot("211")
    ax.set_title("Title for first plot")
    ax.plot(data)

    ax = plt.subplot("212")
    ax.set_title("Title for second plot")
    ax.plot(data)

    plt.show()

Bisakah Anda memeriksa apakah kode ini cocok untuk Anda? Mungkin sesuatu menimpa mereka nanti?

masteusz
sumber
1
Ini berfungsi untuk saya, matplotlib versi 1.2.2 python 2.7.5
NameOfTheRose
41

Jawaban singkat dengan asumsi import matplotlib.pyplot as plt:

plt.gca().set_title('title')

seperti dalam:

plt.subplot(221)
plt.gca().set_title('title')
plt.subplot(222)
etc...

Maka tidak perlu untuk variabel yang berlebihan.

JMDE
sumber
8

Jika Anda ingin membuatnya lebih pendek, Anda dapat menulis:

import matplolib.pyplot as plt
for i in range(4):
    plt.subplot(2,2,i+1).set_title('Subplot n°{}' .format(i+1))
plt.show()

Itu membuatnya mungkin kurang jelas tetapi Anda tidak perlu lebih banyak baris atau variabel

SAGET Shinji
sumber
1

Jika Anda memiliki banyak gambar dan Anda ingin mengulanginya dan menunjukkannya 1 per 1 beserta judul - inilah yang dapat Anda lakukan. Tidak perlu mendefinisikan secara eksplisit ax1, ax2, dll.

  1. Tangkapannya adalah Anda dapat menentukan sumbu dinamis (kapak) seperti pada Baris 1 kode dan Anda dapat mengatur judulnya di dalam satu lingkaran.
  2. Baris array 2D adalah panjang (len) sumbu (kapak)
  3. Setiap baris memiliki 2 item yaitu Ini adalah daftar dalam daftar (Poin No.2)
  4. set_title dapat digunakan untuk mengatur judul, setelah sumbu (kapak) atau subplot yang tepat dipilih.
import matplotlib.pyplot as plt    
fig, ax = plt.subplots(2, 2, figsize=(6, 8))  
for i in range(len(ax)): 
    for j in range(len(ax[i])):
        ## ax[i,j].imshow(test_images_gr[0].reshape(28,28))
        ax[i,j].set_title('Title-' + str(i) + str(j))
rishi jain
sumber
1
fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=1, ncols=4,figsize=(11, 7))

grid = plt.GridSpec(2, 2, wspace=0.2, hspace=0.5)

ax1 = plt.subplot(grid[0, 0])
ax2 = plt.subplot(grid[0, 1:])
ax3 = plt.subplot(grid[1, :1])
ax4 = plt.subplot(grid[1, 1:])

ax1.title.set_text('First Plot')
ax2.title.set_text('Second Plot')
ax3.title.set_text('Third Plot')
ax4.title.set_text('Fourth Plot')

plt.show()

masukkan deskripsi gambar di sini

Wojciech Moszczyński
sumber
0

Solusi yang cenderung saya gunakan semakin banyak adalah ini:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)  # 1
for i, ax in enumerate(axs.ravel()): # 2
    ax.set_title("Plot #{}".format(i)) # 3
  1. Buat jumlah sumbu Anda yang sewenang-wenang
  2. axs.ravel () mengonversi objek 2-dim Anda menjadi vektor 1-dim dalam gaya baris-utama
  3. memberikan judul pada objek sumbu saat ini
JMDE
sumber