如何使用 'for' 循环创建多个图形,而不是一个图形中的所有数据?

how to use 'for' loop to create multiple figures, not all data in one figure?

我想绘制每个区域的一些统计结果。我嵌套了 'for' 循环,在内循环中它生成统计数据,在外循环中它选择区域并绘制相应的统计结果。不确定为什么我的代码将来自所有区域的数据绘制到同一个图中,而不是一个区域的一个图。

Yrstat = []
for j in Regionlist:
    for i in Yrlist:
            dfnew = df.loc[(df['Yr']==i)&(df['Region']==j)]
            if not dfnew.empty:
                #calculate the confidence interval and mean for data in each year
                CI = scipy.stats.norm.interval(alpha=0.95, loc=np.mean(dfnew['FluxTot']), scale=scipy.stats.sem(dfnew['FluxTot']))
                list(CI)
                mean = np.mean (dfnew['FluxTot'])
                Yrstat.append((i, mean, CI[0], CI[1]))
        
    #convert stats list to a dataframe
    yrfullinfo = pd.DataFrame(Yrstat, columns = ['Yr', 'mean', 'CI-','CI+'])

    #making figures
    fig, ax =plt.subplots()
    ax.plot(yrfullinfo['Yr'], yrfullinfo['mean'], label = 'mean')
    ax.plot(yrfullinfo['Yr'], yrfullinfo['CI-'], label = '95%CI')
    ax.plot(yrfullinfo['Yr'], yrfullinfo['CI+'], label = '95%CI')
    ax.legend()
   
    #exporting figures
    filename = "C:/Users/Christina/Desktop/python test/Summary in {}.png". format (j)
    fig.savefig(filename)
    plt.close(fig)

问题不在于数字,脚本在自己的绘图中为每个区域保存了一个 png 文件,这是正确的。问题是你的数据。 您在两个循环之外初始化 Yrstat=[] 。然后在内循环(以及所有外循环)的每个步骤中向其附加数据,并绘制“新”DataFrame yrfullinfo 的数据。这个 DataFrame 随着每次迭代而变大。 您需要为每个区域创建一个新的值列表,这就是为什么我在外循环中移动列表 Yrstat 以便为每个区域重新初始化。

for j in Regionlist:    
    Yrstat = []
    for i in Yrlist:
        dfnew=dfmerge.loc[(dfmerge['Yr']==i)&(dfmerge['Region']==j)]
        if not dfnew.empty:
            #get all statistics for data in each year
            CI = st.norm.interval(alpha=0.95, loc=np.mean(dfnew['FluxTot']), scale=st.sem(dfnew['FluxTot']))
            list(CI)
            mean = np.mean (dfnew['FluxTot'])
            Yrstat.append((j, i, mean, CI[0], CI[1]))