如何在matplotlib中为已绘制的线设置标签?

17

在我的代码中,我已经执行了

ax.plot(x, y, 'b.-', ...)

我需要能够在事后设置相应行的标签,以达到与我之前设置了标签相同的效果

ax.plot(x, y, 'b.-', label='lbl', ...)

在Matplotlib中有没有一种方法可以做到这一点?

1个回答

21

如果您在创建line2D对象时抓取它,您可以使用line.set_label()设置标签:

line, = ax.plot(x, y, 'b.-', ...)
line.set_label('line 1')

如果您没有,可以从Axes中找到line2D

ax.plot(x, y, 'b.-', ...)
ax.lines[-1].set_label('line 1')

注意,ax.lines[-1]将访问最后创建的线条,因此如果您创建了多条线条,则需要小心使用此方法设置标签。


一个最简示例:

import matplotlib.pyplot as plt
fig,ax = plt.subplots(1)
l,=ax.plot(range(5))
l.set_label('line 1')
ax.legend()
plt.show()

输入图像描述


1
谢谢!我尝试使用ax.set_label,但没有效果。你能解释一下为什么在这里ax.set_label不起作用吗? - timgeb
1
ax.set_label 会设置 Axes 实例的标签,而不是线条。由于在一个 Axes 上可以有多条线,因此不清楚 Axes 标签将用于什么。 - tmdavison
在实时更新的绘图中调整标签后,需要运行ax.legend()来重新绘制图例本身。 - Andris
在什么情况下,l = ax.plot(...)(即没有逗号)会返回包含多个Line2D对象的列表? - pfabri
1
@pfabri 当然,如果您在ax.plot命令中绘制多条线路。 - tmdavison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接