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
相关产品推荐
相关产品推荐

