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

Question Simple ici: j'essaie d'obtenir la taille de ma légende en utilisant matplotlib.pyplot pour être plus petit (c'est-à-dire que le texte soit plus petit). Le code que j'utilise va quelque chose comme 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)
214
demandé sur Augustin 2011-08-19 21:06:33

6 réponses

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 la documentation pour legend :

Arguments du mot clé:

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, utiliser le mot clé fontsize.

379
répondu Yann 2017-07-20 14:44:17

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 y a une tonne d'autres rcParams, ils peuvent également être définis dans le fichier matplotlibrc.

On peut aussi supposer que vous pouvez le changer en passant une instance matplotlib.font_manager.FontProperties mais je ne sais pas comment faire. -- >voir la réponse de Yann.

43
répondu Mauro 2017-11-04 22:03:26

Il y a aussi quelques fontsizes nommées , en dehors de la taille en points:

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

Utilisation:

pyplot.legend(loc=2, fontsize = 'x-small')
31
répondu Mathias711 2015-05-14 10:46:20

En utilisant import matplotlib.pyplot as plt

Méthode 1: spécifiez la fontsize lors de l'appel de legend (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 fontsize pour chaque légende à la création (vous permettant d'avoir plusieurs légendes avec des fontsizes différentes). Cependant, vous devrez tout taper manuellement chaque fois que vous créez une légende.

(Note: @ Mathias711 a répertorié les fontsizes nommés disponibles dans sa réponse)

Méthode 2: spécifiez la fontsize dans rcParams (pratique)

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 légende par défaut fontsize, et toutes les légendes l'utiliseront automatiquement, sauf indication contraire à l'aide de la méthode 1. Cela signifie que vous pouvez définir votre légende fontsize au début de votre code, et ne pas vous soucier de le définir pour chaque légende individuelle.

Si vous utilisez une taille par exemple 'medium', alors le texte de la légende à l'échelle mondiale, font.size dans rcParams. Pour changer font.size Utilisez plt.rc(font.size='medium')

24
répondu byntje 2016-09-13 14:58:00

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'étiquette dans les 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 sur mon installation est d'environ 0,5.
  • prop: qui permet un contrôle total de la taille de la police, etc. Vous pouvez définir une police de 8 points en utilisant legend(..., prop={'size':8}). La valeur par défaut sur mon installation est d'environ 14 point.

En outre, la documentation legend répertorie un certain nombre d'autres paramètres de remplissage et d'espacement, notamment: borderpad, handlelength, handletextpad, borderaxespad, et columnspacing. Ceux-ci suivent tous la même forme que labelspacing et area également dans des multiples de fontsize.

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

15
répondu Bryan P 2012-09-04 06:09:04

Sur mon installation, FontProperties ne change que la taille du texte, mais il est encore trop grand et espacé. J'ai trouvé un paramètre dans pyplot.rcParams: legend.labelspacing, ce que 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 au pyplot.fonction légende-passage

prop={'labelspacing':0.25}

Ou

prop={'legend.labelspacing':0.25}

Revient avec une erreur.

5
répondu swint144 2012-01-10 07:34:21