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)
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
.
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.
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')
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')
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.
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.