如何使用 '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]))
我想绘制每个区域的一些统计结果。我嵌套了 '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]))