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 %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),))

这种情况甚至发生在这样一个琐碎的脚本中:

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()

我发现这个错误指向的链接在诊断错误源方面非常无用。

127530 次浏览

你应该加上逗号:

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

之所以需要使用逗号,是因为 plt.plot ()返回一个行对象元组,而不管从该命令实际创建了多少行对象。如果没有逗号,“ plot1”和“ plot2”就是元组而不是行对象,这使得后面对 plt.Legend ()的调用失败。

逗号隐式地解压缩结果,这样“ plot1”和“ plot2”就会自动成为 tuple 中的第一个对象,即您实际需要的行对象。

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

line, = plot(x,sin(x)) what does comma stand for?

使用 handles又名 Proxy artists

import matplotlib.lines as mlines
import matplotlib.pyplot as plt
# defining legend style and data
blue_line = mlines.Line2D([], [], color='blue', label='My Label')
reds_line = mlines.Line2D([], [], color='red', label='My Othes')


plt.legend(handles=[blue_line, reds_line])


plt.show()

使用“ label”关键字,如下所示:

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

and then add the legend like so:

plt.legend()

图例将保留线性属性,如厚度,颜色等。

enter image description here

在绘制图形时使用标签,那么只能使用图例。 X 轴名称和 y 轴名称与图例名称不同。