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)
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
.
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.
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')
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')
Il existe plusieurs paramètres pour ajuster la taille de la légende. Les deux que je trouve les plus utiles sont:
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.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 .
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.