web-dev-qa-db-fra.com

Comment changer la taille de la légende avec matplotlib.pyplot

Question simple ici: j'essaie de réduire la taille de ma légende en utilisant matplotlib.pyplot (c'est-à-dire que le texte doit être plus petit). Le code que j'utilise ressemble à ceci:

plot.figure()
plot.scatter(k, sum_cf, color='black', label='Sum of Cause Fractions')
plot.scatter(k, data[:, 0],  color='b', label='Dis 1: cf = .6, var = .2')
plot.scatter(k, data[:, 1],  color='r',  label='Dis 2: cf = .2, var = .1')
plot.scatter(k, data[:, 2],  color='g', label='Dis 3: cf = .1, var = .01')
plot.legend(loc=2)
264
mike

Vous pouvez définir une taille de police individuelle pour la légende en ajustant le mot clé prop.

plot.legend(loc=2, prop={'size': 6})

Cela prend un dictionnaire de mots-clés correspondant aux propriétés matplotlib.font_manager.FontProperties. Voir le documentation pour la légende :

Arguments de mots clés:

prop: [ None | FontProperties | dict ]
    A matplotlib.font_manager.FontProperties instance. If prop is a 
    dictionary, a new instance will be created with prop. If None, use
    rc settings.

Il est également possible, à partir de la version 1.2.1 , d'utiliser le mot-clé fontsize.

454
Yann

Cela devrait faire

import pylab as plot
params = {'legend.fontsize': 20,
          'legend.handlelength': 2}
plot.rcParams.update(params)

Ensuite, faites l'intrigue après.

Il existe une tonne d'autres rcParams, ils peuvent également être définis dans le fichier matplotlibrc.

Vous pouvez aussi probablement le modifier en passant une instance de matplotlib.font_manager.FontProperties, mais je ne sais pas comment faire. -> voir la réponse de Yann.

54
Mauro

Il y a aussi quelques noms fontsizes , en plus de la taille en points:

xx-small
x-small
small
medium
large
x-large
xx-large

Usage:

pyplot.legend(loc=2, fontsize = 'x-small')
37
Mathias711

en utilisant import matplotlib.pyplot as plt

Méthode 1: spécifiez la taille de la police lors de l'appel de la légende (répétitif)

plt.legend(fontsize=20) # using a size in points
plt.legend(fontsize="x-large") # using a named size

Avec cette méthode, vous pouvez définir la taille de police de chaque légende à la création (ce qui vous permet d’avoir plusieurs légendes avec différentes tailles de police). Cependant, vous devrez tout saisir manuellement chaque fois que vous créez une légende.

(Remarque: @ Mathias711 a répertorié les tailles de police nommées disponibles dans sa réponse.)

Méthode 2: spécifiez la taille de la police dans rcParams (commode)

plt.rc('legend',fontsize=20) # using a size in points
plt.rc('legend',fontsize='medium') # using a named size

Avec cette méthode, vous définissez la taille de police de légende par défaut et toutes les légendes l'utilisent automatiquement, sauf indication contraire de votre part, à l'aide de la méthode 1. Cela signifie que vous pouvez définir votre taille de police de légende au début de votre code, sans vous soucier de la définir pour chaque légende. .

Si vous utilisez une taille nommée, par exemple 'medium', le texte de légende sera mis à l'échelle avec le global font.size dans rcParams. Pour changer font.size, utilisez plt.rc(font.size='medium')

35
binnev

Il existe plusieurs paramètres pour ajuster la taille de la légende. Les deux que je trouve les plus utiles sont:

  • labelspacing: qui définit l'espacement entre les entrées d'étiquettes en multiples de la taille de la police. Par exemple avec une police de 10 points, legend(..., labelspacing=0.2) réduira l'espacement entre les entrées à 2 points. La valeur par défaut de mon installation est d'environ 0,5.
  • prop: permet un contrôle complet de la taille de la police, etc. Vous pouvez définir une police à 8 points à l'aide de legend(..., prop={'size':8}). La valeur par défaut de mon installation est d’environ 14 points.

En outre, la documentation de la légende répertorie un certain nombre d'autres paramètres de remplissage et d'espacement, notamment: borderpad, handlelength, handletextpad, borderaxespad et columnspacing. Celles-ci suivent toutes la même forme que labelspacing et couvrent également plusieurs fois la taille de la police.

Ces valeurs peuvent également être définies comme valeurs par défaut pour toutes les figures à l'aide de fichier matplotlibrc .

16
Bryan P

Lors de mon installation, FontProperties ne modifie que la taille du texte, mais il est toujours trop volumineux et espacé. J'ai trouvé un paramètre dans pyplot.rcParams: legend.labelspacing, qui, je suppose, est défini sur une fraction de la taille de la police. Je l'ai changé avec

pyplot.rcParams.update({'legend.labelspacing':0.25})

Je ne sais pas comment le spécifier à la fonction pyplot.legend - en passant

prop={'labelspacing':0.25}

ou

prop={'legend.labelspacing':0.25}

revient avec une erreur.

5
swint144