Matplotlib'deki alt grafiklere başlık nasıl eklenir?


225

Birçok alt grafik içeren bir figürüm var.

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) 

Alt grafiklere nasıl başlık ekleyebilirim?

fig.suptitletüm grafiklere bir başlık ekler ve her ne kadar ax.set_title()mevcut olsa da , ikincisi alt grafiklerima herhangi bir başlık eklemez.

Yardımın için teşekkürler.

Düzenleme: Yazım hatası düzeltildi set_title(). Teşekkürler Rutger Kassies

Yanıtlar:


201

ax.title.set_text('My Plot Title') çok işe yarıyor gibi görünüyor.

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 alt grafiklere başlık ekle


Histogram için yazı tipi boyutu ile ilgili problemleri olan herkes için, tuhaf bir şekilde kutu sayısını azaltmak onu artırmama izin veriyor. 500'den 100'e gitti.
mLstudent33

Yazı tipi boyutunu belirleyebilmeniz gerekiyorsa ax.set_title('title', fontsize=16)bunun yerine kullanın.
Tobias PG

234

ax.set_title() ayrı alt grafikler için başlıkları ayarlamalıdır:

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

Bu kodun sizin için çalışıp çalışmadığını kontrol edebilir misiniz? Belki daha sonra bir şeyin üzerine yazar?


1
Bu benim için çalışıyor, matplotlib sürüm 1.2.2 python 2.7.5
NameOfTheRose

41

Kısa bir cevap varsayarak import matplotlib.pyplot as plt:

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

de olduğu gibi:

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

Sonra gereksiz değişkenlere gerek yoktur.


8

Kısaltmak isterseniz, şunu yazabilirsiniz:

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

Belki daha az netleşir, ancak daha fazla satıra veya değişkene ihtiyacınız yoktur


1

Birden fazla görüntünüz varsa ve bunlarla birlikte döngü yapmak ve başlıklarla birlikte 1'e 1 göstermek istiyorsanız - yapabileceğiniz budur. Ax1, ax2, vb. Açıkça tanımlanmasına gerek yoktur.

  1. Yakalama, kodun Satırı 1'deki gibi dinamik eksenleri (balta) tanımlayabilir ve başlığını bir döngü içinde ayarlayabilirsiniz.
  2. 2B dizinin satırları eksenin (balta) uzunluğu (len) 'dir
  3. Her satırın 2 öğesi vardır, yani bir liste içindeki listedir (2. Nokta)
  4. set_title, uygun eksenler (balta) veya alt grafik seçildikten sonra başlığı ayarlamak için kullanılabilir.
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))

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

resim açıklamasını buraya girin


0

Daha fazla kullanma eğiliminde olduğum bir çözüm şudur:

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. Rastgele sayıda ekseni oluşturun
  2. axs.ravel (), 2-dim nesnenizi satır-temel tarzında 1-dim vektörüne dönüştürür
  3. başlığı geçerli eksen nesnesine atar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.