python - 获取 matplotlib 中一行的图例标签

标签 python matplotlib

鉴于我在 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/

相关文章:

尝试将时间戳保存到 MySQL 时出现 Python Pandas KeyError

python - 通过 tqdm.write() 重定向 python 脚本中的打印命令

python - 'AxesSubplot' 对象没有属性 'get_axis_bgcolor'

Python matplotlib : memory not being released when specifying figure size

python - 在Python中读取文件后尝试创建x和y值的数组

python - 如何正确使用matplotlib渲染图像直方图?

python - 隐藏直方图

python - 拆分 IPython Magic Shell 多行

python - Altair Ridgeline 不会创建标称组图

javascript - 是否可以在 Python 中将函数打印为字符串?