web-dev-qa-db-fra.com

Comment définir le titre de la figure et la taille de la police des étiquettes d'axes dans Matplotlib?

Je crée une figure dans Matplotlib comme ceci:

from matplotlib import pyplot as plt

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
fig.savefig('test.jpg')

Je souhaite spécifier des tailles de police pour le titre de la figure et les étiquettes des axes. Il faut que les trois tailles de police soient différentes, aussi je ne souhaite pas définir une taille de police globale (mpl.rcParams['font.size']=x) Comment définir les tailles de police pour le titre de la figure et les étiquettes des axes individuellement?

357
vasek1

Les fonctions traitant du texte comme label, title, etc. acceptent les mêmes paramètres que matplotlib.text.Text . Pour la taille de la police, vous pouvez utiliser size/fontsize:

from matplotlib import pyplot as plt    

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title', fontsize=20)
plt.xlabel('xlabel', fontsize=18)
plt.ylabel('ylabel', fontsize=16)
fig.savefig('test.jpg')

Pour définir globalement les tailles title et label, mpl.rcParams contient axes.titlesize et axes.labelsize. (De la page):

axes.titlesize      : large   # fontsize of the axes title
axes.labelsize      : medium  # fontsize of the x any y labels

(Pour autant que je sache, il n’existe aucun moyen de définir les tailles des étiquettes x et y séparément.)

Et je vois que axes.titlesize n'affecte pas suptitle. Je suppose que vous devez définir cela manuellement.

528
Avaris

Vous pouvez également le faire globalement via un dictionnaire rcParams:

import matplotlib.pylab as pylab
params = {'legend.fontsize': 'x-large',
          'figure.figsize': (15, 5),
         'axes.labelsize': 'x-large',
         'axes.titlesize':'x-large',
         'xtick.labelsize':'x-large',
         'ytick.labelsize':'x-large'}
pylab.rcParams.update(params)
57
tsando

Si vous êtes plus habitué à utiliser des objets ax pour effectuer votre traçage, vous trouverez peut-être que la fonction ax.xaxis.label.set_size() est plus facile à mémoriser, ou du moins, à trouver à l'aide de la touche tab dans un terminal ipython. Il semble avoir besoin d'une opération de redessinage après pour voir l'effet. Par exemple:

import matplotlib.pyplot as plt

# set up a plot with dummy data
fig, ax = plt.subplots()
x = [0, 1, 2]
y = [0, 3, 9]
ax.plot(x,y)

# title and labels, setting initial sizes
fig.suptitle('test title', fontsize=12)
ax.set_xlabel('xlabel', fontsize=10)
ax.set_ylabel('ylabel', fontsize='medium')   # relative to plt.rcParams['font.size']

# setting label sizes after creation
ax.xaxis.label.set_size(20)
plt.draw()

Je ne connais pas de méthode similaire pour définir la taille du sous-titre après sa création.

23
spinup

Pour modifier uniquement la police du titre (et non la police de l'axe), j'ai utilisé ceci:

import matplotlib.pyplot as plt
fig = plt.Figure()
ax = fig.add_subplot(111)
ax.set_title('My Title', fontdict={'fontsize': 8, 'fontweight': 'medium'})

Le fontdict sauf tous les kwargs de matplotlib.text.Text .

0
tammoj

Une autre solution pour changer la taille de la police est de changer le remplissage. Lorsque Python enregistre votre fichier PNG, vous pouvez modifier la mise en page à l'aide de la boîte de dialogue qui s'ouvre. L'espacement entre les axes, le rembourrage si vous le souhaitez peut être modifié à ce stade.

0
Naz