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()
.