Me gustaría cambiar el grosor/ancho de las muestras de línea que aparecen en la leyenda de pyplot.
El ancho de línea de las muestras de línea dentro de la leyenda es el mismo que el de las líneas que representan en el gráfico (por lo que si la línea y1 tiene linewidth=7.0 , la etiqueta y1 correspondiente de la leyenda también tendrá linewidth=7.0 ).
Me gustaría que las líneas de la leyenda fueran más gruesas que las líneas que aparecen en la trama.
Por ejemplo, el siguiente código genera la siguiente imagen:
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() Quiero configurar la etiqueta y1 en la leyenda para que tenga linewidth=7.0 , mientras que la línea y1 que aparece en el gráfico tiene un ancho diferente ( linewidth=1.0 ).
No pude encontrar una solución en línea. Los problemas relacionados tenían respuestas para cambiar el ancho de línea del cuadro delimitador de la leyenda a través de leg.get_frame().set_linewidth(7.0) . Esto no cambia el ancho de línea de las líneas dentro de la leyenda.
La respuesta de @ImportanceOfBeingErnest es buena si solo desea cambiar el ancho de línea dentro del cuadro de leyenda. Pero creo que es un poco más complejo ya que tienes que copiar los identificadores antes de cambiar el ancho de línea de la leyenda. Además, no puede cambiar el tamaño de fuente de la etiqueta de la leyenda. Los siguientes dos métodos no solo pueden cambiar el ancho de línea, sino también el tamaño de fuente del texto de la etiqueta de leyenda de una manera más concisa.
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() 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()Los dos métodos anteriores producen la misma imagen de salida:
