Depuis la mise à jour de matplotlib, l'erreur suivante apparaît lorsque j'essaie de créer une légende:
/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),))
Cela se produit même avec un script trivial comme ceci:
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()
J'ai trouvé le lien que l'erreur me dirige vers assez inutile pour diagnostiquer la source de l'erreur.
Vous devriez ajouter des virgules:
plot1, = plt.plot(a,b)
plot2, = plt.plot(a,c)
La raison pour laquelle vous avez besoin des virgules est que plt.plot () renvoie un tuple d'objets linéaires, quel que soit le nombre réellement créé à partir de la commande. Sans la virgule, "plot1" et "plot2" sont des nuplets au lieu d'objets linéaires, ce qui fait que l'appel ultérieur à plt.legend () échoue.
La virgule décompresse implicitement les résultats afin qu'au lieu d'un tuple, "plot1" et "plot2" deviennent automatiquement les premiers objets du tuple, c'est-à-dire les objets linéaires que vous voulez réellement.
http://matplotlib.sourceforge.net/users/legend_guide.html#adjusting-the-order-of-legend-items
Utilisez 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()
utiliser label en traçant un graphique, seul u peut utiliser legend . Le nom de l'axe x et le nom de l'axe y sont différents du nom de la légende.