首页 文章

Matplotlib Legends不工作

提问于
浏览
66

自从升级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()

我发现错误指向我的链接在诊断错误源方面毫无用处 .

4 回答

  • 129

    你应该添加逗号:

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

    你需要逗号的原因是因为plt.plot()返回一个行对象的元组,无论从命令实际创建了多少个 . 如果没有逗号,“plot1”和“plot2”是元组而不是行对象,这使得后来对plt.legend()的调用失败 .

    逗号隐式地解压缩结果,使得“plot1”和“plot2”不是一个元组,而是自动成为元组中的第一个对象,即你实际想要的线对象 .

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

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

  • 3

    使用 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()
    
  • 6

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

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

    然后像这样添加图例:

    pyplot.legend()
    

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

    enter image description here

  • 0

    在绘制图形时使用标签然后只能使用图例 . x轴名称和y轴名称与图例名称不同 .

相关问题