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?
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