Python:在循环中创建3个面板图

时间:2018-02-27 11:41:25

标签: python loops plot

我想生成6个图,其中两个在一页上,所以总共3页3个面板图。我想在一个循环中做到这一点。

这是我的代码:

l=np.size(lon)
n=np.size(lat)
t=np.size(years) # where years is a list like (7039,7040,7041)
prec_avg=np.zeros((t,n,l))
prec_sum=np.zeros((t,n,l))

for y in range(0,3):
    fig = plt.figure()
    fig.subplots_adjust(hspace=0.4, wspace=0.2,top=0.95, right=0.95)

    i=y*5
    k=i+5

    prec_avg[y,:,:]=np.mean(prec[i:k,:,:],axis=0)
    prec_sum[y,:,:]=np.sum(prec[i:k,:,:],axis=0)
    # ----- create plots -------------------------------------------------------
    lon, lat = np.meshgrid(lon,lat)

    ax = fig.add_subplot(211)
    plt.title('mean precipitation MJJAS %i BC ' % years[y],fontsize=10)
    cs = m.contourf(lon,lat,prec_avg[y,:,:],latlon=True,cmap=cm.jet,levels = np.linspace(0, 500, 30))


    ax = fig.add_subplot(212)
    plt.title('total precipitation MJJAS %i BC ' % years[y],fontsize=10)
    cs = m.contourf(lon,lat,prec_sum[y,:,:],latlon=True,cmap=cm.jet,levels = np.linspace(0, 4000, 50))

    pfile.savefig()
    plt.close()
pfile.close()

对于第一个y步骤,它工作正常并且没有错误,只是在第二次跳入循环时,所以对于y = 1,它会产生错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

在我给出绘图命令的行中:

cs=m.contourf(lon,lat,prec_avg.........

我还尝试在循环中定义变量prec_avgprec_sum,然后没有第一个维度并在最后删除变量,目的是重置变量并定义它在每个循环步骤中都是新的,但这也不起作用。问题必须在其他地方,也许有人可以帮助我!谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我发现了错误: 我需要在循环外执行lon,lat= np.meshgrid(lon,lat)。否则它会使每个循环内的两个维度相乘。