Comment ajouter un titre aux sous-parcelles dans Matplotlib?


225

J'ai une figure qui contient de nombreuses sous-intrigues.

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) 

Comment ajouter des titres aux sous-parcelles?

fig.suptitleajoute un titre à tous les graphiques et bien qu'il ax.set_title()existe, ce dernier n'ajoute aucun titre à mes sous-intrigues.

Merci de votre aide.

Edit: Correction de la faute de frappe sur set_title(). Merci Rutger Kassies

Réponses:


201

ax.title.set_text('My Plot Title') semble fonctionner aussi.

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 ajouter des titres sur les sous-parcelles


Pour tous ceux qui ont des problèmes avec la taille de la police pour un histogramme, réduire assez curieusement le nombre de cases me permet de l'augmenter. Passé de 500 à 100.
mLstudent33

Si vous devez pouvoir spécifier la taille de la police, utilisez ax.set_title('title', fontsize=16)plutôt.
Tobias PG

234

ax.set_title() devrait définir les titres des sous-parcelles distinctes:

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

Pouvez-vous vérifier si ce code fonctionne pour vous? Peut-être que quelque chose les écrase plus tard?


1
Cela fonctionne pour moi, matplotlib version 1.2.2 python 2.7.5
NameOfTheRose

41

Une réponse abrégée en supposant import matplotlib.pyplot as plt:

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

un péché:

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

Il n'y a alors pas besoin de variables superflues.


8

Si vous voulez le raccourcir, vous pouvez écrire:

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

Cela rend peut-être moins clair mais vous n'avez pas besoin de plus de lignes ou de variables


1

Dans le cas où vous avez plusieurs images et que vous souhaitez les parcourir et les afficher 1 par 1 avec les titres - c'est ce que vous pouvez faire. Pas besoin de définir explicitement ax1, ax2, etc.

  1. Le hic est que vous pouvez définir des axes dynamiques (hache) comme dans la ligne 1 du code et vous pouvez définir son titre dans une boucle.
  2. Les rangées du tableau 2D correspondent à la longueur (len) de l'axe (ax)
  3. Chaque ligne a 2 éléments, c'est-à-dire qu'elle est dans une liste (point n ° 2)
  4. set_title peut être utilisé pour définir le titre, une fois que les axes (hache) ou sous-intrigue appropriés sont sélectionnés.
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()

entrez la description de l'image ici


0

Une solution que j'utilise de plus en plus est celle-ci:

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. Créez votre nombre arbitraire d'axes
  2. axs.ravel () convertit votre objet 2-dim en un vecteur 1-dim dans le style de ligne principale
  3. attribue le titre à l'axe-objet courant
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.