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