Библиотек matplotlib легенды не работает
С момента обновления matplotlib я получаю следующую ошибку при попытке создать легенду:
/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 %snUse proxy artist instead.nnhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artistn" % (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 %snUse proxy artist instead.nnhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artistn" % (str(orig_handle),))
это даже происходит с тривиальным скриптом вроде этого:
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()
Я нашел ссылку, что ошибка указывает мне на довольно бесполезно в диагностике источника ошибки.
4 ответа:
вы должны добавить запятые:
plot1, = plt.plot(a,b) plot2, = plt.plot(a,c)
причина, по которой вам нужны запятые, заключается в том, что plt.plot () возвращает кортеж линейных объектов, независимо от того, сколько фактически создано из команды. Без запятой "plot1" и "plot2" являются кортежами вместо линейных объектов, что делает более поздний вызов plt.легенда() не получится.
запятая неявно распаковывает результаты так, что вместо кортежа" plot1 "и" plot2 " автоматически становятся первыми объектами внутри кортежа, т. е. линейные объекты, которые вы действительно хотите.
http://matplotlib.sourceforge.net/users/legend_guide.html#adjusting-the-order-of-legend-items
использовать
handles
АКА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()