graficos graficas example python matplotlib plot

graficas - plt.legend python



Agregar una leyenda a PyPlot en Matplotlib de la manera más simple posible (4)

TL; DR -> ¿Cómo se puede crear una leyenda para un gráfico de líneas en el PyPlot Matplotlib sin crear variables adicionales?

Por favor considere la siguiente secuencia de comandos gráficos:

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 de PyPlot . Esto idealmente genera un gráfico como el siguiente:

Nada especial, lo sé. Sin embargo, no está claro en qué datos se traza dónde (estoy tratando de trazar los datos de algunos algoritmos de ordenamiento, la longitud contra el tiempo tomado, 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 ( desde el 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 conservar la simplicidad de mi script actual?


Agregue etiquetas a cada argumento en su llamada de trazado correspondiente a la serie que está graficando, es decir, label = "series 1"

Luego simplemente agregue Pyplot.legend() a la parte inferior de su script y la leyenda mostrará estas etiquetas.


Agregue una label= a cada una de sus llamadas a plot() y luego invoque legend(loc=''upper left'') .

Considera esta muestra:

import numpy as np import pylab x = np.linspace(0, 20, 1000) y1 = np.sin(x) y2 = np.cos(x) pylab.plot(x, y1, ''-b'', label=''sine'') pylab.plot(x, y2, ''-r'', label=''cosine'') pylab.legend(loc=''upper left'') pylab.ylim(-1.5, 2.0) pylab.show()

Ligeramente modificado de este tutorial: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html


Aquí hay un ejemplo para ayudarte ...

fig = plt.figure(figsize=(10,5)) ax = fig.add_subplot(111) ax.set_title(''ADR vs Rating (CS:GO)'') ax.scatter(x=data[:,0],y=data[:,1],label=''Data'') plt.plot(data[:,0], m*data[:,0] + b,color=''red'',label=''Our Fitting Line'') ax.set_xlabel(''ADR'') ax.set_ylabel(''Rating'') ax.legend(loc=''best'') plt.show()


Puede acceder a la instancia de Axes ( ax ) con plt.gca() . En este caso, puedes usar

plt.gca().legend()

Puede hacer esto usando la palabra clave label= en cada una de sus llamadas a plt.plot() o asignando sus etiquetas como una tupla dentro de la legend , como en este ejemplo de trabajo:

import numpy as np import matplotlib.pyplot as plt x = np.linspace(-0.75,1,100) y0 = np.exp(2 + 3*x - 7*x**3) y1 = 7-4*np.sin(4*x) plt.plot(x,y0,x,y1) plt.gca().legend((''y0'',''y1'')) plt.show()

Sin embargo, si necesita acceder a la instancia de Axes más de una vez, le recomiendo que la guarde en el ax variable con

ax = plt.gca()

y luego llamar a ax lugar de plt.gca() .