TL; DR -> ¿Cómo se puede crear una leyenda para un gráfico de líneas en
Matplotlib
'sPyPlot
sin crear ninguna variable adicional?
Considere la secuencia de comandos gráfica a continuación:
if __name__ == '__main__':
PyPlot.plot(total_lengths, sort_times_bubble, 'b-',
total_lengths, sort_times_ins, 'r-',
total_lengths, sort_times_merge_r, 'g+',
total_lengths, sort_times_merge_i, 'p-', )
PyPlot.title("Combined Statistics")
PyPlot.xlabel("Length of list (number)")
PyPlot.ylabel("Time taken (seconds)")
PyPlot.show()
Como puede ver, este es un uso muy básico de matplotlib
's PyPlot
. Idealmente, esto genera un gráfico como el siguiente:
Nada especial, lo sé. Sin embargo, no está claro qué datos se están trazando dónde (estoy tratando de trazar los datos de algunos algoritmos de clasificación, la longitud en función del tiempo empleado, y me gustaría asegurarme de que la gente sepa qué línea es cuál). Por lo tanto, necesito una leyenda, sin embargo, echando un vistazo al siguiente ejemplo a continuación ( del sitio oficial ):
ax = subplot(1,1,1)
p1, = ax.plot([1,2,3], label="line 1")
p2, = ax.plot([3,2,1], label="line 2")
p3, = ax.plot([2,3,1], label="line 3")
handles, labels = ax.get_legend_handles_labels()
# reverse the order
ax.legend(handles[::-1], labels[::-1])
# or sort them by labels
import operator
hl = sorted(zip(handles, labels),
key=operator.itemgetter(1))
handles2, labels2 = zip(*hl)
ax.legend(handles2, labels2)
Verás que necesito crear una variable adicional ax
. ¿Cómo puedo agregar una leyenda a mi gráfico sin tener que crear esta variable adicional y mantener la simplicidad de mi script actual?
fuente
matplotlib
antes, quería mantener las cosas lo más simples posible. Además, si echa un vistazo a la respuesta de Rob, es mucho más simple que el ejemplo que se muestra en el sitio web. Espero que eso ayude.import matplotlib.pyplot as plt
lugar dePyPlot
Respuestas:
Agregue un
label=
a cada una de susplot()
llamadas y luego llamelegend(loc='upper left')
.Considere esta muestra (probada con Python 3.8.0):
Ligeramente modificado de este tutorial: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
fuente
plt.legend(loc='upper left')
también funciona, de dondeplt
esimport matplotlib.pyplot as plt
.plt.legend
:plt.legend(['First Label', 'Second Label'])
Puede acceder a la instancia de Axes (
ax
) conplt.gca()
. En este caso, puedes usarPuede hacerlo utilizando la
label=
palabra clave en cada una de susplt.plot()
llamadas o asignando sus etiquetas como una tupla o lista dentrolegend
, como en este ejemplo de trabajo:Sin embargo, si necesita acceder a la instancia de Axes más de una vez, le recomiendo guardarlo en la variable
ax
cony luego llamando en
ax
lugar deplt.gca()
.fuente
Aquí hay un ejemplo para ayudarte ...
fuente
Una trama simple para las curvas seno y coseno con una leyenda.
Usado
matplotlib.pyplot
fuente
Agregue etiquetas a cada argumento en su llamada a la trama correspondiente a la serie que está graficando, es decir
label = "series 1"
Luego, simplemente agregue
Pyplot.legend()
al final de su secuencia de comandos y la leyenda mostrará estas etiquetas.fuente
Puede agregar una documentación de leyenda personalizada
fuente
fuente