You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过点击图例在Matplotlib单图中显示/隐藏指定系列

实现可点击图例切换数据系列的显示/隐藏

嘿,这个需求完全可以实现!不需要每次修改代码,只要点击图例条目就能对应显示/隐藏数据系列。下面给你两种便捷的方案:


方案一:原生Matplotlib实现(无需第三方库)

只需要给图例的每个条目绑定一个点击回调函数,就能实现点击切换。这个方案在原生Matplotlib基础上做了轻量改造,逻辑清晰且好用:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据并绘制所有曲线,同时保存每个曲线对象
fig, ax = plt.subplots()
lines = []
for i in range(20):
    line, = ax.plot(np.random.randn(1000), label=str(i))
    lines.append(line)

# 创建图例
leg = ax.legend()

# 定义图例点击的回调函数
def toggle_line_visibility(event):
    # 通过图例文本的标签(数字)找到对应的曲线
    target_line = lines[int(event.get_text())]
    # 切换曲线的可见状态
    target_line.set_visible(not target_line.get_visible())
    # 刷新画布生效
    fig.canvas.draw()

# 给每个图例文本开启点击拾取功能,并绑定回调
for text in leg.get_texts():
    text.set_picker(True)
    text.figure.canvas.mpl_connect('pick_event', toggle_line_visibility)

plt.show()

操作说明:

  • 点击任意图例条目,对应的曲线就会立刻切换显示/隐藏状态
  • 比如你想只显示#4、#5,只要点击其他18个图例条目把它们隐藏即可;之后切换到#13、#7,再点击#4、#5隐藏,点击#13、#7显示就行

方案二:借助第三方库简化代码(更省心)

如果你想进一步减少代码量,可以用mpl_interactions这个库,它内置了图例点击切换的功能,只需要一行配置就能搞定:

首先安装库:

pip install mpl_interactions

然后修改你的代码:

import matplotlib.pyplot as plt
import numpy as np
from mpl_interactions import interactive_plot

# 生成数据
x = np.arange(1000)
# 批量生成20组随机数据
data_series = [np.random.randn(1000) for _ in range(20)]
# 给每个系列设置标签
labels = [str(i) for i in range(20)]

# 绘制可交互图表,开启图例点击隐藏功能
fig, ax = plt.subplots()
interactive_plot(x, data_series, labels=labels, legend_click_to_hide=True)

plt.show()

这个库帮你封装了所有事件绑定的细节,你只需要专注于数据和绘图,剩下的交互逻辑它都帮你搞定了,非常适合快速实现需求。


两种方案都能完美满足你的需求,完全不需要修改代码,只靠鼠标点击就能自由切换显示哪些数据系列~

内容的提问来源于stack exchange,提问作者Basj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:12:53