J'ai un graphique dont le coin supérieur gauche est assez vide. J'ai donc décidé d'y mettre ma boîte de légende.
Cependant, je trouve que les éléments dans la légende sont très petits et que le légende elle-même est également assez petit.
Par "petit", je veux dire quelque chose comme ça
Comment puis-je agrandir les éléments ( et non les textes! ) dans la zone de légende?
Comment puis-je agrandir la boîte elle-même?
Pour contrôler le remplissage à l'intérieur de la légende (en augmentant efficacement la zone de légende), utilisez le borderpad
kwarg.
Par exemple, voici la valeur par défaut:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left')
plt.show()
Si nous changeons le rembourrage intérieur avec borderpad=2
, nous allons agrandir la zone de légende globale (les unités sont des multiples de la taille de la police, similaires à em
):
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', borderpad=2)
plt.show()
Alternativement, vous souhaiterez peut-être modifier l'espacement entre les éléments. Utilisez labelspacing
pour contrôler cela:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', labelspacing=2)
plt.show()
Dans la plupart des cas, cependant, il est plus judicieux d'ajuster à la fois labelspacing
et borderpad
en même temps:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', borderpad=1.5, labelspacing=1.5)
plt.show()
D'un autre côté, si vous avez de très gros marqueurs, vous souhaiterez peut-être agrandir la longueur de la ligne indiquée dans la légende. Par exemple, la valeur par défaut pourrait ressembler à ceci:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 5)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, marker='o', markersize=20,
label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left')
plt.show()
Si nous changeons handlelength
, nous obtiendrons des lignes plus longues dans la légende, ce qui semble un peu plus réaliste. (Je modifie également borderpad
et labelspacing
ici pour donner plus de place.)
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 5)
fig, ax = plt.subplots()
for i in range(1, 6):
ax.plot(x, i*x + x, marker='o', markersize=20,
label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', handlelength=5, borderpad=1.2, labelspacing=1.2)
plt.show()
À partir des documents, voici quelques-unes des autres options que vous voudrez peut-être explorer:
Padding and spacing between various elements use following
keywords parameters. These values are measure in font-size
units. E.g., a fontsize of 10 points and a handlelength=5
implies a handlelength of 50 points. Values from rcParams
will be used if None.
=====================================================================
Keyword | Description
=====================================================================
borderpad the fractional whitespace inside the legend border
labelspacing the vertical space between the legend entries
handlelength the length of the legend handles
handletextpad the pad between the legend handle and text
borderaxespad the pad between the axes and legend border
columnspacing the spacing between columns
Lorsque vous appelez legend, vous pouvez utiliser l'argument prop
avec un dict contenant size.
plt.errorbar(x, y, yerr=err, fmt='-o', color='k', label = 'DR errors')
plt.legend(prop={'size':50})
Par exemple.
Voir ici pour plus d'informations sur légende