鉴于我在 matplotlib 中有一个线对象,我如何获得该线的图例标签?
Artist 类的 get_label()
方法仅在图例未更改或创建标签(使用 plt.legend()
或类似方法)时才有效。
可以使用 Legend.get_legend_handler()
获取与行关联的 handler,但它不与任何文本关联。 Legend.get_lines()
给出了一个线对象列表...但它们与绘制的对象不同。
get_label()
不起作用的示例:
x = [0,1]
y = [1,1]
line, = plt.plot(x,y)
plt.legend(("hello",))
plt.plot()
line.get_label() # returns '_line0'
有没有人有什么想法?
最佳答案
没有通用的方法可以知道图例是否包含给定艺术家的标签。艺术家可以有或没有自定义标签,这不一定需要与图例中使用的标签一致。
因此,解决方案总是取决于假设。
A. 如果我们假设给艺术家一个标签,并且这个标签就是图例中显示的标签,那么解决方案很简单:
line.get_label()
B.如果我们假设线条的创建顺序与它们在图例中出现的顺序相同,并且中间没有其他艺术家,我们可以这样做
def get_label_for_line(line):
leg = line.axes.get_legend()
ind = line.axes.get_lines().index(line)
return leg.texts[ind].get_text()
C.如果我们假设图例是直接由艺术家(而不是其他代理艺术家)创建的,我们可以比较标签,例如
def get_label_for_line(line):
leg = line.axes.get_legend()
for h, t in zip(leg.legendHandles, leg.texts):
if h.get_label() == line.get_label():
return t.get_text()
对于其他解决方案,人们需要更多地了解人物、其艺术家和传说是如何创建的。
关于python - 获取 matplotlib 中一行的图例标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44465242/