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

Python列表绘图:图例条目重复问题

解决Matplotlib图例重复显示的问题

看来你遇到的核心问题是绘图时重复添加了相同的图例标签,导致图例显示n次。咱们先从代码修正和解决方案两部分来处理:

首先先纠正你代码里的一个小错误:你把筛选后的DataFrame误写成了索引对象,正确的筛选应该是拿到包含Channel A和B的行数据,而不是它们的索引。调整后的基础代码如下:

# 正确筛选Channel为A、B的行,得到完整的DataFrame
filtered_df = df[df.Channel.isin(['A', 'B'])]
# 直接提取列转为列表,不需要用append套一层嵌套列表
Time = filtered_df['Time'].tolist()
Value1 = filtered_df['Value 1'].tolist()
# 此时绘制的是一组数据,图例只会显示一次
ln1 = ax1.plot(Time, Value1, 'kD', label='CHANNEL')

如果你的实际场景是需要循环处理n组数据(比如多次调用plot),那可以试试下面两种方法避免图例重复:

方法1:仅第一次绘图时设置label

在循环绘制时,只在第一次绘制时指定label参数,后续绘制时省略该参数,这样图例只会生成一次:

# 假设你有n组待绘制的数据列表
data_pairs = [(time_1, val_1), (time_2, val_2), ..., (time_n, val_n)]

for idx, (time_data, val_data) in enumerate(data_pairs):
    # 仅第一次循环设置图例标签
    if idx == 0:
        ax1.plot(time_data, val_data, 'kD', label='CHANNEL')
    else:
        ax1.plot(time_data, val_data, 'kD')
# 最后统一添加图例
ax1.legend()

方法2:手动去重图例项

如果已经完成了所有绘图,且图例已经出现重复,可以通过提取图例句柄和标签,去重后重新设置图例:

# 先完成所有绘图操作
ln1 = ax1.plot(Time, Value1, 'kD', label='CHANNEL')
# ...其他重复绘图的代码...

# 获取当前绘图的图例句柄和标签
handles, labels = ax1.get_legend_handles_labels()
# 利用字典键的唯一性去重,保留最后一个实例(或第一个,取决于需求)
unique_map = dict(zip(labels, handles))
# 重新设置图例,使用去重后的内容
ax1.legend(unique_map.values(), unique_map.keys())

这样就能解决图例重复n次的问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:32:44