Matplotlib Leyendas que no funcionan

Desde la actualización de matplotlib, aparece el siguiente error al intentar crear una leyenda:

/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [] Use proxy artist instead. http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),)) /usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [] Use proxy artist instead. http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),)) 

Esto incluso ocurre con un script trivial como este:

 import matplotlib.pyplot as plt a = [1,2,3] b = [4,5,6] c = [7,8,9] plot1 = plt.plot(a,b) plot2 = plt.plot(a,c) plt.legend([plot1,plot2],["plot 1", "plot 2"]) plt.show() 

He encontrado el enlace que me indica que el error es bastante inútil para diagnosticar la fuente del error.

Usted debe agregar comas:

 plot1, = plt.plot(a,b) plot2, = plt.plot(a,c) 

La razón por la que necesita las comas es porque plt.plot () devuelve una tupla de objetos de línea, sin importar cuántos se hayan creado realmente desde el comando. Sin la coma, “plot1” y “plot2” son tuplas en lugar de objetos de línea, lo que hace que la llamada posterior a plt.legend () falle.

La coma implícitamente desempaqueta los resultados para que, en lugar de una tupla, “plot1” y “plot2” se conviertan automáticamente en los primeros objetos dentro de la tupla, es decir, los objetos de línea que realmente desea.

http://matplotlib.sourceforge.net/users/legend_guide.html#adjusting-the-order-of-legend-items

line, = plot (x, sin (x)) ¿qué significa coma?

Utilice handles AKA Proxy artists

 import matplotlib.lines as mlines import matplotlib.pyplot as plt blue_line = mlines.Line2D([], [], color='blue', label='My Label') reds_line = mlines.Line2D([], [], color='reds', label='My Othes') plt.legend(handles=[blue_line, reds_line]) plt.show() 

Use la palabra clave “etiqueta”, así:

 pyplot.plot(x, y, label='x vs. y') 

y luego agregar la leyenda como tal:

 pyplot.legend() 

La leyenda conservará propiedades de línea como grosor, colores, etc.

introduzca la descripción de la imagen aquí

use la etiqueta mientras traza el gráfico, entonces solo u puede usar la leyenda. El nombre del eje x y el nombre del eje y son diferentes al nombre de la leyenda.