Come aggiungere un titolo alle sottotrame in Matplotlib?


225

Ho una figura che contiene molte sottotrame.

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) 

Come faccio ad aggiungere titoli alle sottotrame?

fig.suptitleaggiunge un titolo a tutti i grafici e sebbene ax.set_title()esista, quest'ultimo non aggiunge alcun titolo ai miei grafici secondari.

Grazie per l'aiuto.

Modifica: errore di battitura corretto set_title(). Grazie Rutger Kassies

Risposte:


201

ax.title.set_text('My Plot Title') sembra funzionare anche.

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 aggiunge titoli su sottotrame


Per chiunque abbia problemi con la dimensione del carattere per un istogramma, ridurre stranamente il numero di bin mi consente di aumentarlo. Siamo andati da 500 a 100.
mLstudent33,

Se devi essere in grado di specificare la dimensione del carattere, usa ax.set_title('title', fontsize=16)invece.
Tobias PG

234

ax.set_title() dovrebbe impostare i titoli per sottotrame separate:

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

Puoi verificare se questo codice funziona per te? Forse qualcosa li sovrascrive più tardi?


1
Questo funziona per me, matplotlib versione 1.2.2 python 2.7.5
NameOfTheRose

41

Una risposta abbreviata presupponendo import matplotlib.pyplot as plt:

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

come in:

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

Quindi non sono necessarie variabili superflue.


8

Se vuoi ridurlo, puoi scrivere:

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

Lo rende forse meno chiaro ma non hai bisogno di più righe o variabili


1

Nel caso in cui tu abbia più immagini e desideri eseguirne il loop e mostrarle 1 per 1 insieme ai titoli: questo è ciò che puoi fare. Non è necessario definire esplicitamente ax1, ax2, ecc.

  1. Il trucco è che puoi definire gli assi dinamici (ax) come nella riga 1 del codice e puoi impostare il suo titolo all'interno di un loop.
  2. Le righe dell'array 2D sono la lunghezza (len) dell'asse (ax)
  3. Ogni riga ha 2 elementi, ovvero è un elenco all'interno di un elenco (punto n. 2)
  4. set_title può essere utilizzato per impostare il titolo, una volta selezionati gli assi (ax) o il sottotrama corretti.
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()

inserisci qui la descrizione dell'immagine


0

Una soluzione che tendo a usare sempre di più è questa:

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. Crea il tuo numero arbitrario di assi
  2. axs.ravel () converte il tuo oggetto a 2 dim in un vettore a 1 dim in stile maggiore di riga
  3. assegna il titolo all'attuale oggetto-asse
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.