Añadir una leyenda a PyPlot en Matplotlib de la manera más sencilla posible

¿Cómo se puede crear una leyenda para un gráfico de líneas en Matplotlib' s PyPlot sin crear ninguna variable extra?

Por favor, considere el script de graficación de abajo:

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 puedes ver, este es un uso muy básico de matplotlib's PyPlot. Esto idealmente genera un gráfico como el de abajo:

Gráfico1

Nada especial, lo sé. Sin embargo, no está claro en cuanto a los datos que se está trazando donde (I'm tratando de trazar los datos de algunos algoritmos de clasificación, la longitud contra el tiempo tomado, y I'd como para asegurarse de que la gente sabe que la línea es que). Por lo tanto, necesito una leyenda, sin embargo, echando un vistazo al siguiente ejemplo (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 extra ax. ¿Cómo puedo añadir una leyenda a mi gráfico sin tener que crear esta variable extra y conservando la simplicidad de mi script actual?

Solución

Añada una etiqueta= a cada una de sus llamadas a plot(), y luego llame a legend(loc='superior izquierda').

Considere este ejemplo (probado con Python 3.8.0):

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 1000)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, "-b", label="sine")
plt.plot(x, y2, "-r", label="cosine")
plt.legend(loc="upper left")
plt.ylim(-1.5, 2.0)
plt.show()

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

Comentarios (5)

He aquí un ejemplo que le ayudará...

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

[]

Comentarios (0)

Añade etiquetas a cada argumento de tu llamada a la gráfica correspondiente a la serie que está graficando, es decir, `label = "serie 1".

A continuación, simplemente añada Pyplot.legend() al final de su script y la leyenda mostrará estas etiquetas.

Comentarios (1)