pyplot - plot python 3
Matplotlib Legends no funciona (4)
Debes 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 realmente se crean a partir del comando. Sin la coma, "plot1" y "plot2" son tuplas en lugar de objetos de línea, lo que hace que falle la última llamada a plt.legend ().
La coma implícitamente descomprime los resultados de modo que en lugar de una tupla, "plot1" y "plot2" se convierten 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
Desde que actualicé matplotlib recibo el siguiente error cada vez que trato de crear una leyenda:
/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [<matplotlib.lines.Line2D object at 0x3a30810>]
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 [<matplotlib.lines.Line2D object at 0x3a30990>]
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 el error me indica que es bastante inútil para diagnosticar el origen del error.
Utilice las 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 etiqueta mientras traza el gráfico, entonces solo puede usar la leyenda. El nombre del eje x y el nombre del eje y es diferente del nombre de la leyenda.