406 votes

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

Une question simple : J'essaye d'obtenir la taille de ma légende à l'aide de matplotlib.pyplot pour qu'il soit plus petit (c'est-à-dire que le texte soit 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)

0 votes

Pour une réponse actualisée, 2021, voir stackoverflow.com/a/62669552/2612410

648voto

Yann Points 6909

Vous pouvez définir une taille de police individuelle pour la légende en réglant le paramètre prop mot-clé.

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

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

Les arguments des 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 pour utiliser le mot-clé fontsize .

2 votes

Pouvez-vous me dire où je peux trouver des détails sur plot.rcParams.update ?

1 votes

Pour une réponse actualisée (2020), voir stackoverflow.com/a/62669552/2612410

0 votes

Merci pour la réponse, mais pourquoi matplotlib choisir une manière contre-intuitive de personnaliser les polices pour les legend ?

87voto

byntje Points 449

en utilisant import matplotlib.pyplot as plt

Méthode 1 : spécifier 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 la police pour chaque légende lors de la création (ce qui vous permet d'avoir plusieurs légendes avec des tailles de police différentes). Cependant, vous devrez tout saisir manuellement à chaque fois que vous créerez une légende.

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

Méthode 2 : spécifier la taille de la police 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 taille de police par défaut de la légende, et toutes les légendes l'utiliseront automatiquement, sauf si vous spécifiez le contraire en utilisant la méthode 1. Cela signifie que vous pouvez définir la taille de police de votre légende au début de votre code, sans vous soucier de la définir pour chaque légende individuelle.

Si vous utilisez une taille nommée, par ex. 'medium' le texte de la légende sera mis à l'échelle en fonction de l'échelle globale. font.size sur rcParams . Pour changer font.size utiliser plt.rc(font.size='medium')

3 votes

Juste pour informer les débutants en Python (comme moi) : La méthode 1 ne fonctionne qu'après la création d'un graphe (après une ligne plot()) et la méthode 2 ne fonctionne qu'avant la création d'un graphe. Merci. Je suis d'accord avec @Scott Gigante, cela devrait être la réponse !

73voto

Mauro Points 438

Cela devrait faire

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

Puis faites l'intrigue après.

Il y a une tonne d'autres rcParams, ils peuvent aussi être définis dans le fichier matplotlibrc.

Il est également probable que vous puissiez le modifier en passant une commande matplotlib.font_manager.FontProperties mais cela, je ne sais pas comment le faire. --> voir la réponse de Yann.

2 votes

Ou matplotlib.rc('legend', fontsize=0.5, linewidth=2)

2 votes

Qui devrait être legend.handlelength au lieu de legend.linewidth

0 votes

Le membre get_default_size() de FontManager renvoie la taille par défaut. Pour moi, c'est 12

47voto

Mathias711 Points 361

Il y a aussi quelques noms Polices de caractères à l'exception de la taille en points :

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

Utilisation :

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

21voto

Bryan P Points 646

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

  • labelpacing : qui définit l'espacement entre les entrées de l'étiquette 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 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 points.

En outre, le documentation des légendes énumère un certain nombre d'autres paramètres de remplissage et d'espacement, notamment : borderpad , handlelength , handletextpad , borderaxespad et columnspacing . Ils suivent tous la même forme que l'espacement entre les étiquettes et sont également exprimés en multiples de la taille de la police.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X