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

Shailen
la source

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

Jarad
la source
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?

masteusz
la source
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.

JMDE
la source
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

SAGET Shinji
la source
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))
rishi jain
la source
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

Wojciech Moszczyński
la source
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
JMDE
la source