Я хотел бы создать PDF-файл, содержащий 12 рисунков / подзаговор, обработанных во вложенном цикле 'for'.
12 рисунков получены из 4 метрик, примененных к 3 различным переменным (3 * 4 = 12).
Вот код, который я использую:
#########VARIABLES#############################
df = pd.read_csv('scores.csv',delimiter=',')
sta='Jony'
cvars=['Qle','Qh','NEE']
exps=['ctr','lai']
expsC={'ctr':'k','lai':'b'}
stats=['MBE','SD','NME','pcorr']
##################FUNCTION#########################
def extract_score(df,station,cvar,exp,score):
a=df[(df.station == station) & (df.cvar == cvar) &
(df.exp == exp) ]
return a[score].values[0]
def extract_score_exp(df,station,cvar,score,expS=None):
out=[]
if expS is None:
exps=np.unique(df.exp)
else:
expsf=np.unique(df.exp)
exps=[]
for ee in expsf:
if expS in ee:
exps.append(ee)
for exp in exps:
out.append(extract_score(df,station,cvar,exp,score))
return exps,out
def get_val_exp(exps,pos=1):
return [float(bb.split('_')[pos]) for bb in exps]
#####################PLOT###################################
for j,cvar in enumerate(cvars):
fig=plt.figure()
ax1 = plt.subplot2grid((3,1), (j,0))
for i,stat in enumerate(stats):
ax2 = plt.subplot2grid((1,4), (0,i))
for exp in exps:
xscore0=extract_score(df,sta,cvar,exp,stat)
xx0=250
expsP,xscore=extract_score_exp(df,sta,cvar,stat,expS='_'+exp)
xx=get_val_exp(expsP)
ax2.plot(xx,xscore,'.',c=expsC[exp])
ax2.plot(xx0,xscore0,'x',c=expsC[exp])
ax.set_title(stat,fontsize=8)
plt.show()
plt.savefig('/home/david/test_pals/result/output/test.pdf')
plt.close()
Код работает нормально, а команда «plt.show ()» фактически показывает то, что я хочу, как видно из следующегокартинка:
![enter image description here](https://i.stack.imgur.com/DatlN.png)
Но, к сожалению, команда ´plt.savefig´ просто сохраняет последний полученный 1 * 4 субплот:
![enter image description here](https://i.stack.imgur.com/z7DjM.png)
Я пробовал другое место в цикле для «plt.savefig», но мне не удалось сохранить цифры 4 * 3 в одном файле PDF.У кого-нибудь есть указание почему?