2016-03-03 79 views
0

我有一个函数,它接受输入,3个数组和一个常量值。for循环中的Matplotlib子图

函数内部我给出了10个不同的条件,并试图在10个不同的子图中绘制它们。

def ra_vs_dec(alpha,delta,zphot,mlim): 
    zmin = [0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2] 
    zmax = [0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3] 
    plot_no = [1,2,3,4,5,6,7,8,9,10] # THESE ARE THE SUBPLOT NUMBERS 

    for a,b,c in zip(zmin,zmax,plot_no): 
     ra = alpha[(data_m200>mlim)*(data_z>a)*(data_z<b)] # RA FOR ZCOSMO 
     dec = delta[(data_m200>mlim)*(data_z>a)*(data_z<b)] # DEC FOR ZCOSMO 
     ra_zphot = alpha[(data_m200>mlim)*(zphot>a)*(zphot<b)] # RA FOR ZPHOT 
     dec_zphot = delta[(data_m200>mlim)*(zphot>a)*(zphot<b)] # DEC FOR ZPHOT 

     fig = plt.figure() 
     ax = fig.add_subplot(2,5,c) 
     ax.scatter(ra,dec,color='red',s=5.0,label=''+str(a)+'<zcosmo<'+str(b)+'') 
     ax.scatter(ra_zphot,dec_zphot,color='blue',s=5.0,label=''+str(a)+'<zphot<'+str(b)+'') 
     ax.legend(loc='best',scatterpoints=2) 

    fig.show() 

然而,当我运行上面的代码,我只得到了最后的插曲,即10日的插曲。我在这里做错了什么?

我希望看到所有的10个子图。

回答

2

将图形的创建移动到循环外部。通过在循环内部创建10个独立的图形,然后向每个图形添加一个子图。然后,您使用fig.show(),它只显示最终迭代中创建的图形。

fig = plt.figure() 

for a,b,c in zip(zmin,zmax,plot_no): 
    ra = alpha[(data_m200>mlim)*(data_z>a)*(data_z<b)] # RA FOR ZCOSMO 
    dec = delta[(data_m200>mlim)*(data_z>a)*(data_z<b)] # DEC FOR ZCOSMO 
    ra_zphot = alpha[(data_m200>mlim)*(zphot>a)*(zphot<b)] # RA FOR ZPHOT 
    dec_zphot = delta[(data_m200>mlim)*(zphot>a)*(zphot<b)] # DEC FOR ZPHOT 

    ax = fig.add_subplot(2,5,c) 
    ax.scatter(ra,dec,color='red',s=5.0,label=''+str(a)+'<zcosmo<'+str(b)+'') 
    ax.scatter(ra_zphot,dec_zphot,color='blue',s=5.0,label=''+str(a)+'<zphot<'+str(b)+'') 
    ax.legend(loc='best',scatterpoints=2) 

fig.show()