122 votes

Modifier la largeur de ligne des lignes dans la légende matplotlib pyplot

Je voudrais changer l'épaisseur/largeur de la ligne des échantillons présentés dans le pyplot légende.

Largeur de ligne de la ligne d'échantillons à l'intérieur de la légende sont les mêmes que les lignes qu'ils représentent dans l'intrigue (si la ligne y1 a linewidth=7.0, la légende correspondante y1 label ont linewidth=7.0).

Je voudrais la légende des lignes plus épaisses que les lignes en vedette dans l'intrigue.

Par exemple, le code suivant génère l'image suivante:

import numpy as np
import matplotlib.pyplot as plt

# make some data
x = np.linspace(0, 2*np.pi)

y1 = np.sin(x)
y2 = np.cos(x)

# plot sin(x) and cos(x)
fig = plt.figure()
ax  = fig.add_subplot(111)
ax.plot(x, y1, c='b', label='y1',linewidth=7.0)
ax.plot(x, y2, c='r', label='y2')

leg = plt.legend()
plt.show()

example code plot

Je veux mettre l' y1 de l'étiquette dans la légende pour avoir linewidth=7.0, tandis que l' y1 ligne en vedette dans la parcelle a une largeur différente (linewidth=1.0).

Je n'arrivais pas à trouver une solution en ligne. La seule relation que les questions ont des réponses pour la modification de la largeur de raie de la légende de la boîte englobante par leg.get_frame().set_linewidth(7.0). Ce n'est pas le changement de largeur de raie des lignes dans la légende.

57voto

jdhao Points 3136

@ImportanceOfBeingErnest 's réponse est bonne si vous souhaitez uniquement modifier la largeur de raie à l'intérieur de la boîte de la légende. Mais je pense que c'est un peu plus complexe car vous devez copier les poignées avant de changer de légende de la largeur de raie. En outre, il ne peut pas changer l'étiquette de légende fontsize. Les deux méthodes suivantes peuvent non seulement modifier la largeur de raie, mais aussi la légende de l'étiquette taille de police de texte de façon plus concise.

Méthode 1

import numpy as np
import matplotlib.pyplot as plt

# make some data
x = np.linspace(0, 2*np.pi)

y1 = np.sin(x)
y2 = np.cos(x)

# plot sin(x) and cos(x)
fig = plt.figure()
ax  = fig.add_subplot(111)
ax.plot(x, y1, c='b', label='y1')
ax.plot(x, y2, c='r', label='y2')

leg = plt.legend()
# get the individual lines inside legend and set line width
for line in leg.get_lines():
    line.set_linewidth(4)
# get label texts inside legend and set font size
for text in leg.get_texts():
    text.set_fontsize('x-large')

plt.savefig('leg_example')
plt.show()

Méthode 2

import numpy as np
import matplotlib.pyplot as plt

# make some data
x = np.linspace(0, 2*np.pi)

y1 = np.sin(x)
y2 = np.cos(x)

# plot sin(x) and cos(x)
fig = plt.figure()
ax  = fig.add_subplot(111)
ax.plot(x, y1, c='b', label='y1')
ax.plot(x, y2, c='r', label='y2')

leg = plt.legend()
# get the lines and texts inside legend box
leg_lines = leg.get_lines()
leg_texts = leg.get_texts()
# bulk-set the properties of all lines and texts
plt.setp(leg_lines, linewidth=4)
plt.setp(leg_texts, fontsize='x-large')
plt.savefig('leg_example')
plt.show()

Ces deux méthodes donnent le même résultat en image:

output image

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