鉴于我在 matplotlib 中有一个线对象,我如何获得该线的图例标签?
get_label()Artist 类的方法仅在图例未更改或创建标签(使用plt.legend()或类似)时才有效。
可以使用 获取与行关联的处理程序Legend.get_legend_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'
Run Code Online (Sandbox Code Playgroud)
有没有人有任何想法?
没有通用的方法可以知道图例是否包含给定艺术家的标签。艺术家可以有或没有自定义标签,这不一定需要与图例中使用的标签一致。
因此,解决方案将始终取决于假设。
A.如果我们假设给艺术家一个标签,并且这个标签是图例中显示的标签,那么解决方案很简单:
line.get_label()
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
对于其他解决方案,人们需要更多地了解图形、其艺术家和图例是如何创建的。
| 归档时间: |
|
| 查看次数: |
7560 次 |
| 最近记录: |