Jak dodać tytuł do podplotów w Matplotlib?

225

Mam jedną cyfrę, która zawiera wiele wątków.

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) 

Jak dodać tytuły do ​​podplotów?

fig.suptitledodaje tytuł do wszystkich wykresów i chociaż ax.set_title()istnieje, ten drugi nie dodaje żadnego tytułu do moich podplotów.

Dziękuję za pomoc

Edycja: poprawiona literówka na temat set_title(). Dzięki Rutger Kassies

Shailen
źródło

Odpowiedzi:

201

ax.title.set_text('My Plot Title') wydaje się również działać.

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 dodaje tytuły do ​​podplotów

Jarad
źródło
Dla każdego, kto ma problemy z rozmiarem czcionki dla histogramu, co dziwne, zmniejszenie liczby pojemników pozwala mi ją zwiększyć.
Zmieniono
Jeśli chcesz określić rozmiar czcionki, użyj ax.set_title('title', fontsize=16)zamiast tego.
Tobias PG
234

ax.set_title() powinien ustawić tytuły dla oddzielnych wątków:

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

Czy możesz sprawdzić, czy ten kod działa dla Ciebie? Może coś je później nadpisuje?

masteusz
źródło
1
To działa dla mnie, matplotlib wersja 1.2.2 python 2.7.5
NameOfTheRose
41

Skrócona odpowiedź przy założeniu import matplotlib.pyplot as plt:

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

jak w:

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

Wtedy nie ma potrzeby stosowania zbędnych zmiennych.

JMDE
źródło
8

Jeśli chcesz go skrócić, możesz napisać:

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

To może być mniej jasne, ale nie potrzebujesz więcej linii lub zmiennych

SAGET Shinji
źródło
1

Jeśli masz wiele zdjęć i chcesz je zapętlić i wyświetlać 1 na 1 wraz z tytułami - możesz to zrobić. Nie ma potrzeby jawnego definiowania ax1, ax2 itp.

  1. Chwytem jest to, że możesz zdefiniować dynamiczne osie (ax) jak w wierszu 1 kodu i możesz ustawić jego tytuł w pętli.
  2. Rzędy tablicy 2D to długość (długość) osi (ax)
  3. Każdy wiersz ma 2 elementy, tzn. Jest listą na liście (punkt nr 2)
  4. set_title może być użyty do ustawienia tytułu, gdy wybrane zostaną odpowiednie osie (ax) lub podplot.
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
źródło
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()

wprowadź opis zdjęcia tutaj

Wojciech Moszczyński
źródło
0

Rozwiązaniem, którego używam coraz częściej, jest to:

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. Utwórz dowolną liczbę osi
  2. axs.ravel () przekształca twój 2-dim obiekt w 1-dim wektor w stylu major-row
  3. przypisuje tytuł do bieżącego obiektu osi
JMDE
źródło