轴和图例的get_lines()方法之间的区别

时间:2016-08-01 19:40:26

标签: python matplotlib legend

在代码中

from matplotlib.figure import Figure

fig1 = Figure()
ax1 = fig1.add_subplot(111)
p1 = ax1.plot([1,2,3], label='123')
lg1 = ax1.legend()

lg1.get_lines()[0] == ax1.get_lines()[0]评估为false,即使它们应该引用同一行。我可以知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

简短的回答是它们是内存中对象的不同实例。

In [6]: lg1.get_lines()
Out[6]: [<matplotlib.lines.Line2D at 0x10e355828>]

In [7]: ax1.get_lines()
Out[7]: <a list of 1 Line2D objects>

In [8]: list(ax1.get_lines())
Out[8]: [<matplotlib.lines.Line2D at 0x10e342940>]

请注意,id值不同,因此它们并非真正“相等”,即使它们可能“引用”图中的同一个对象。

In [9]: lg1.get_lines()[0]
Out[9]: <matplotlib.lines.Line2D at 0x10e355828>

In [10]: ax1.get_lines()[0]
Out[10]: <matplotlib.lines.Line2D at 0x10e342940>
In [11]: id(lg1.get_lines()[0])
Out[11]: 4533344296

In [12]: id(ax1.get_lines()[0])
Out[12]: 4533266752

或者,相反,ax1.get_lines()给出了绘制的线条,lg1.get_lines()给出了图例框中绘制的实际线条