Python-嵌套的for循环中的plt.savefig

时间:2019-05-09 16:00:38

标签: python plot subplot

我想创建一个包含以嵌套“ for”循环处理的12个图形/子图的pdf。

这12个数字是由应用于3个不同变量(3 * 4 = 12)的4个度量得出的。

这是我正在使用的代码:

#########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中。有人指出为什么吗?

0 个答案:

没有答案