for循环内的图例

在下面的代码中,它应该显示每条曲线的图例(每条图中有7条曲线),并具有特定的名称,因为我使用f string作为其名称,但是图例仅显示了所有曲线的最后一条曲线的名称。情节。

请帮忙吗?

for x in range(len(ng)):
    fig,(ax1) = plt.subplots(1,figsize=(9,6))
    plt.subplots_adjust(wspace=0.5,hspace=0.1)
    for xx in range(1,819):
            Ju_list=[]
            ET_list=[]
            ET1_list=[]
            Unu_list=[]
            z_list=[]
            uf_list=[]
            for z in np.arange(0,11):
                    Ju = dfimppara.iloc[xx,1]
                    Jl = dfimppara.iloc[xx,2]
                    lim = Ju - Jl
                    if lim > 1:
                        pass
                    else:
                        if Ju<8:

                            Ju_list.append(dfimppara.iloc[xx,1])
                            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)              
                            l1,=ax1.plot(z_list,ET_list)

                            ax1.title.set_text(f'UF=1e-24,Tg={Tg[x]},ng={ng[x]}')
                            ax1.set_ylabel('1-BB(CMB)/BB(Tex)')
                            ax1.set_xlabel('z')
                            plt.legend([l1],[f'{dfimppara.iloc[xx,1]}'])


                        else:
                            pass

    plt.show()
hutuchong100 回答:for循环内的图例

我认为您希望在每个循环中为图分配一个标签。 pyplot.legend只需根据标签在轴上放置一个图例。尝试以下操作(注意您的ax1.plot行中的区别):

                else:
                    if Ju<8:

                        Ju_list.append(dfimppara.iloc[xx,1])
                        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)              
                        l1,=ax1.plot(z_list,ET_list,label=f'{dfimppara.iloc[xx,1]}')

                        ax1.title.set_text(f'UF=1e-24,Tg={Tg[x]},ng={ng[x]}')
                        ax1.set_ylabel('1-BB(CMB)/BB(Tex)')
                        ax1.set_xlabel('z')
                        plt.legend()

                    else:
                        pass

plt.show()
本文链接:https://www.f2er.com/3078412.html

大家都在问