在代码中
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,即使它们应该引用同一行。我可以知道为什么会这样吗?
答案 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()
给出了图例框中绘制的实际线条