Python - plt.savefig во вложенном цикле for - PullRequest
0 голосов
/ 09 мая 2019

Я хотел бы создать 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

Но, к сожалению, команда ´plt.savefig´ просто сохраняет последний полученный 1 * 4 субплот:

enter image description here

Я пробовал другое место в цикле для «plt.savefig», но мне не удалось сохранить цифры 4 * 3 в одном файле PDF.У кого-нибудь есть указание почему?

...