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

循环中图例显示异常:仅展示最后一条曲线标签求助

解决Matplotlib图例仅显示最后一条曲线标签的问题

我来帮你搞定这个图例显示的麻烦!你的代码里有几个关键问题导致了图例只显示最后一条、重复标签的情况,咱们一步步修正:

问题根源分析

  1. 循环内频繁重置图例:你在z循环里每次调用plt.legend([l1], [...]),这会直接替换掉之前的图例,最终只会保留最后一次循环生成的标签。
  2. 重复绘制同一分组的曲线:z循环会为同一个Ju值重复执行10次,每次都添加相同的图例标签,导致大量重复项。
  3. 图例逻辑错位:你需要按Ju值(1-7)分组显示图例,但当前代码的图例设置和循环逻辑不匹配。

修改后的代码

import matplotlib.pyplot as plt
import numpy as np

# 假设ET、Bcmb、B是已定义的函数,dfimppara、ng、Tg是已加载的数据
for x in range(len(ng)): 
    fig, ax1 = plt.subplots(1, figsize=(9,6)) 
    plt.subplots_adjust(wspace=0.5, hspace=0.1) 
    # 用字典存储每个Ju对应的线条对象,确保同一Ju只生成一个图例标签
    ju_line_map = {}
    
    for xx in range(1, 819): 
        Ju = dfimppara.iloc[xx, 1] 
        Jl = dfimppara.iloc[xx, 2] 
        lim = Ju - Jl 
        
        # 提前过滤不符合条件的项,减少嵌套层级
        if lim > 1 or Ju >= 8:
            continue
            
        # 为当前xx的所有z值准备数据
        ET_list = [] 
        z_list = [] 
        for z in np.arange(0, 11): 
            T = ET(xx, z, ng[x], 1e-24, Tg[x], 1) 
            BC = Bcmb(xx,z) 
            Btex = B(xx,T) 
            ET_list.append(1 - BC/Btex) 
            z_list.append(z) 
        
        # 绘制曲线并管理图例
        if Ju not in ju_line_map:
            # 第一次绘制该Ju的曲线,保存线条对象并设置标签
            line, = ax1.plot(z_list, ET_list, label=f'{Ju}')
            ju_line_map[Ju] = line
        else:
            # 已有该Ju的图例,直接绘制曲线不重复添加标签
            ax1.plot(z_list, ET_list)
    
    # 所有曲线绘制完成后统一设置图例和标题
    ax1.set_title(f'UF=1e-24,Tg={Tg[x]},ng={ng[x]}') 
    ax1.set_ylabel('1-BB(CMB)/BB(Tex)') 
    ax1.set_xlabel('z') 
    # 使用字典中保存的线条对象生成图例,确保只显示1-7的唯一标签
    plt.legend(handles=ju_line_map.values())
    plt.show()

关键修改说明

  • 字典管理图例线条:ju_line_map字典记录每个Ju对应的线条实例,确保同一个Ju只在图例中出现一次,彻底解决重复标签问题。
  • 调整数据准备逻辑:把ET_list和z_list的初始化移到xx循环内,为每个xx一次性收集所有z值对应的数值,再绘制完整曲线(之前的写法会重复绘制同一条曲线10次)。
  • 提前过滤无效项:将不符合条件的lim>1和Ju>=8判断提前,简化代码嵌套结构,提升可读性。
  • 统一设置图例:把plt.legend()移到所有绘图完成后,用字典中存储的线条对象生成图例,确保所有1-7的标签都能正确显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:45:02