是否可以使用 matplotlib 图例选择器选择图例文本区域而不是图例行?

Posted

技术标签:

【中文标题】是否可以使用 matplotlib 图例选择器选择图例文本区域而不是图例行?【英文标题】:Is it possible to use matplotlib legend picker selecting legend text area not legend line? 【发布时间】:2021-10-09 02:28:28 【问题描述】:

我想使用 matplotlib 制作图表。我想添加一个选择器函数,这样我就可以从这个 matplotlib URL 中找到代码:https://matplotlib.org/stable/gallery/event_handling/legend_picking.html

但是,当我执行此代码时,由于图例线很细,很难准确选择图例线。我想修改此代码,以便在单击图例行右侧的图例文本区域时选择器功能起作用。

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 1)
y1 = 2 * np.sin(2*np.pi*t)
y2 = 4 * np.sin(2*np.pi*2*t)

fig, ax = plt.subplots()
ax.set_title('Click on legend line to toggle line on/off')
line1, = ax.plot(t, y1, lw=2, label='1 Hz')
line2, = ax.plot(t, y2, lw=2, label='2 Hz')
leg = ax.legend(fancybox=True, shadow=True)

lines = [line1, line2]
lined =   # Will map legend lines to original lines.

for legline, origline in zip(leg.get_lines(), lines):
    print(legline)
    print(origline)
    legline.set_picker(True)  # Enable picking on the legend line.
    lined[legline] = origline

def on_pick(event):
    # On the pick event, find the original line corresponding to the legend
    # proxy line, and toggle its visibility.
    legline = event.artist
    origline = lined[legline]
    visible = not origline.get_visible()
    origline.set_visible(visible)
    # Change the alpha on the line in the legend so we can see what lines
    # have been toggled.
    legline.set_alpha(1.0 if visible else 0.2)
    fig.canvas.draw()

fig.canvas.mpl_connect('pick_event', on_pick)
plt.show()

【问题讨论】:

Plotly 图形库自动为任何绘图启用此图例选取功能。 Plotly 非常适合交互式绘图,但如果您需要静态绘图,那么这可能不是最佳解决方案。 【参考方案1】:

一个替代使用了here 使点击的容差高于legend line,因此更容易点击。

只需从legline.set_picker(True) 更改为legline.set_picker(7)

【讨论】:

非常感谢。你的答案是最好的。

以上是关于是否可以使用 matplotlib 图例选择器选择图例文本区域而不是图例行?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 matplotlib 中添加一个字符串作为图例项

在 matplotlib 中为图例中的标签部分设置样式

Power BI 动态图例

如何在 matplotlib 小部件的嵌入式图形上使用跨度选择器?

Matplotlib:在图例中移动标记位置

如何根据 barplot 的值在 matplotlib 中创建自定义图例?