2016-10-17 2 views
2

아래에서 볼 수 있듯이 11 개의 서브 포트로 그림을 그려야합니다. 그러나 홀수 인 것처럼 나는 그것을 제거하기 위해 subplot (4,3,12)을 처리하는 방법을 모릅니다 ... 그리고 중심에 2 개의 마지막 플롯을 놓습니다. 또한 서브 Plot 크기를 increse하고 싶습니다. 공간이 너무 중요합니다. 코드는 다음과 같습니다.Matplotlib odd subplots

enter image description here

코드는 다음과 같습니다 달성

plt.close() 

fig, axes = plt.subplots(nrows=4, ncols=3) 

plt.tight_layout(pad=0.05, w_pad=0.001, h_pad=2.0) 
ax1 = plt.subplot(431) # creates first axis 
ax1.set_xticks([]) 
ax1.set_yticks([]) 
ax1.tick_params(labelsize=8) 
i1 = ax1.imshow(IIIm,cmap='hot',extent=(0,2000,0,2000),vmin=-0.2,vmax=-0.1) 
i11 = ax1.plot((0,600),(1000,1000),'k-',linewidth=3) 
cb1=plt.colorbar(i1,ax=ax1,ticks=[-0.2,-0.15,-0.1],fraction=0.046, pad=0.04,format='%.3f') 
cb1.ax.tick_params(labelsize=8) 
ax1.set_title("$n = -3$", y=1.05, fontsize=12) 


ax2 = plt.subplot(432) # creates second axis 
ax2.set_xticks([]) 
ax2.set_yticks([]) 
i2=ax2.imshow(IIm,cmap='hot',extent=(0,2000,0,2000),vmin=-0.1,vmax=0.1) 
i22 = ax2.plot((0,600),(1000,1000),'k-',linewidth=3) 
ax2.set_title("$n = -2$", y=1.05, fontsize=12) 
ax2.set_xticklabels([]) 
ax2.set_yticklabels([]) 
cb2=plt.colorbar(i2,ax=ax2,ticks=[-0.1,0.0,0.1],fraction=0.046, pad=0.04,format='%.3f') 
cb2.ax.tick_params(labelsize=8) 

ax3 = plt.subplot(433) # creates first axis 
ax3.set_xticks([]) 
ax3.set_yticks([]) 
i3 = ax3.imshow(Im,cmap='hot',extent=(0,2000,0,2000),vmin=-1,vmax=-0.2) 
i33 = ax3.plot((0,600),(1000,1000),'k-',linewidth=3) 
ax3.set_title("$n = -1$ ", y=1.05, fontsize=12) 
cb3=plt.colorbar(i3,ax=ax3,ticks=[-1,-0.6,-0.2],fraction=0.046, pad=0.04,format='%.3f') 
ax3.set_xticklabels([]) 
ax3.set_yticklabels([]) 
cb3.ax.tick_params(labelsize=8) 
#plt.gcf().tight_layout() 





#plt.tight_layout(pad=0.05, w_pad=0.001, h_pad=2.0) 
ax1 = plt.subplot(434) # creates first axis 
ax1.set_xticks([]) 
ax1.set_yticks([]) 
ax1.tick_params(labelsize=8) 
i1 = ax1.imshow(ZV_0_modeI,extent=(0,2000,0,2000),cmap=plt.cm.hot,origin="lower", vmin=-1, vmax=1) 
i11 = ax1.plot((0,600),(1000,1000),'k-',linewidth=3) 
cb1=plt.colorbar(i1,ax=ax1,ticks=[-1,0, 1],fraction=0.046, pad=0.04,format='%.2f') 
cb1.ax.tick_params(labelsize=8) 
ax1.set_title("$ n = 0$", y=1.05, fontsize=12) 


ax2 = plt.subplot(435) # creates second axis 
ax2.set_xticks([]) 
ax2.set_yticks([]) 
i2=ax2.imshow(I,cmap='hot',extent=(0,2000,0,2000), vmin=-1, vmax=1) 
i22 = ax2.plot((0,600),(1000,1000),'k-',linewidth=3) 
ax2.set_title("$n = 1$", y=1.05, fontsize=12) 
ax2.set_xticklabels([]) 
ax2.set_yticklabels([]) 
cb2=plt.colorbar(i2,ax=ax2,fraction=0.046, pad=0.04,ticks=[-1,0,1],format='%.2f') 
cb2.ax.tick_params(labelsize=8) 

ax3 = plt.subplot(436) # creates first axis 
ax3.set_xticks([]) 
ax3.set_yticks([]) 
i3 = ax3.imshow(II,cmap='hot',extent=(0,2000,0,2000),vmin=-1,vmax=1) 
i33 = ax3.plot((0,600),(1000,1000),'k-',linewidth=3) 
ax3.set_title("$n = 2$ ", y=1.05, fontsize=12) 
cb3=plt.colorbar(i3,ax=ax3,fraction=0.046, pad=0.04,ticks=[-1.,0,1.],format='%.2f') 
ax3.set_xticklabels([]) 
ax3.set_yticklabels([]) 
cb3.ax.tick_params(labelsize=8) 
plt.gcf().tight_layout() 




plt.tight_layout(pad=0.05, w_pad=0.001, h_pad=2.0) 
ax1 = plt.subplot(437) # creates first axis 
ax1.set_xticks([]) 
ax1.set_yticks([]) 
ax1.tick_params(labelsize=8) 
i1 = ax1.imshow(III,cmap=plt.cm.hot,origin="lower",extent=(0,2000,0,2000),vmin=-1, vmax=1) 
i11 = ax1.plot((0,600),(1000,1000),'k-',linewidth=3) 
cb1=plt.colorbar(i1,ax=ax1,ticks=[-1,0, 1],fraction=0.046, pad=0.04,format='%.2f') 
cb1.ax.tick_params(labelsize=8) 
ax1.set_title("$ n = 3$", y=1.05, fontsize=12) 

ax2 = plt.subplot(438) # creates second axis 
ax2.set_xticks([]) 
ax2.set_yticks([]) 
i2=ax2.imshow(IV,cmap='hot',extent=(0,2000,0,2000), vmin=-1, vmax=1) 
i22 = ax2.plot((0,600),(1000,1000),'k-',linewidth=3) 
ax2.set_title("$n = 4$", y=1.05, fontsize=12) 
ax2.set_xticklabels([]) 
ax2.set_yticklabels([]) 
cb2=plt.colorbar(i2,ax=ax2,fraction=0.046, pad=0.04,ticks=[-1,0,1],format='%.2f') 
cb2.ax.tick_params(labelsize=8) 

ax3 = plt.subplot(439) # creates first axis 
ax3.set_xticks([]) 
ax3.set_yticks([]) 
i3 = ax3.imshow(V,cmap='hot',extent=(0,2000,0,2000),vmin=-1,vmax=1) 
i33 = ax3.plot((0,600),(1000,1000),'k-',linewidth=3) 
ax3.set_title("$n = 5$ ", y=1.05, fontsize=12) 
cb3=plt.colorbar(i3,ax=ax3,fraction=0.046, pad=0.04,ticks=[-1.,0,1.],format='%.2f') 
ax3.set_xticklabels([]) 
ax3.set_yticklabels([]) 
cb3.ax.tick_params(labelsize=8) 
plt.gcf().tight_layout() 




plt.tight_layout(pad=0.05, w_pad=0.001, h_pad=2.0) 
ax1 = plt.subplot(4,3,10) # creates first axis 
ax1.set_xticks([]) 
ax1.set_yticks([]) 
ax1.tick_params(labelsize=8) 
i1 = ax1.imshow(VI,cmap=plt.cm.hot,origin="lower",extent=(0,2000,0,2000),vmin=-1, vmax=1) 
i11 = ax1.plot((0,600),(1000,1000),'k-',linewidth=3) 
cb1=plt.colorbar(i1,ax=ax1,ticks=[-1,0, 1],fraction=0.046, pad=0.04,format='%.2f') 
cb1.ax.tick_params(labelsize=8) 
ax1.set_title("$ n = 6$", y=1.05, fontsize=12) 

ax2 = plt.subplot(4,3,11) # creates second axis 
ax2.set_xticks([0]) 
ax2.set_yticks([]) 
i2=ax2.imshow(VII,cmap='hot',extent=(0,2000,0,2000), vmin=-1, vmax=1) 
i22 = ax2.plot((0,600),(1000,1000),'k-',linewidth=3) 
ax2.set_title("$n = 7$", y=1.05, fontsize=12) 
ax2.set_xticklabels([]) 
ax2.set_yticklabels([]) 
cb2=plt.colorbar(i2,ax=ax2,fraction=0.046, pad=0.04,ticks=[-1,0,1],format='%.2f') 
cb2.ax.tick_params(labelsize=8) 


plt.savefig('filtre.png', dpi=250,bbox_inches='tight', pad_inches=0.1) 

plt.show() 
+2

를 =의 plt.subplots 축 (NROWS = 4으로 ncols = 3)'당신은 축 것을 작성한 예를 들어 수동으로 숨길 필요가 있습니다. https://codeyarns.com/2015/06/29/how-to-hide-axis-of-plot-in-matplotlib/ 편집 : http : http : //stackoverflow.com/questions/18603959/borderless-matplotlib-plots – Khris

+0

'축'을 모두 사용하지 않고 만드는 이유는 무엇입니까? 나머지 코드는 그대로두고 간단한 'fig = pl.figure()'만으로이 문제를 해결할 수 있습니다. – Bart

답변

2

한 가지 방법은 당신이 필요로하는 matplotlibs subplot2grid 기능을 사용하는 것입니다. 이것을 사용하여 그리드의 전체 크기 (귀하의 경우 4,3)를 설정하고이 그리드의 특정 서브 그림에만 데이터를 플롯하도록 선택할 수 있습니다. 이 도면 생성

import matplotlib.pyplot as plt 

x = [1,2] 
y = [3,4] 

ax1 = plt.subplot2grid((4, 3), (0, 0)) 
ax2 = plt.subplot2grid((4, 3), (0, 1)) 
ax3 = plt.subplot2grid((4, 3), (0, 2)) 
ax4 = plt.subplot2grid((4, 3), (1, 0)) 
ax5 = plt.subplot2grid((4, 3), (1, 1)) 
ax6 = plt.subplot2grid((4, 3), (1, 2)) 
ax7 = plt.subplot2grid((4, 3), (2, 0)) 
ax8 = plt.subplot2grid((4, 3), (2, 1)) 
ax9 = plt.subplot2grid((4, 3), (2, 2)) 
ax10 = plt.subplot2grid((4, 3), (3, 0)) 
ax11 = plt.subplot2grid((4, 3), (3, 1)) 

plt.subplots_adjust(wspace = 0.3, hspace = 0.3) #make the figure look better 

ax1.plot(x,y) 
ax2.plot(x,y) 
ax3.plot(x,y) 
ax4.plot(x,y) 
ax5.plot(x,y) 
ax6.plot(x,y) 
ax7.plot(x,y) 
ax8.plot(x,y) 
ax9.plot(x,y) 
ax10.plot(x,y) 
ax11.plot(x,y) 

plt.show() 

: 이하 간략화 된 예는도 '로

enter image description here

+0

귀하의 기여에 대단히 고맙습니다! 그리고 마지막 두 사람을 중심에두고 싶다면? – user3601754

+1

아래쪽 두 개를 가운데 정렬하는 것에 대해서는 잘 모르겠지만'col11 = 2 '를'ax11 = plt.subplot2grid ((4,3), (3)'과 같은'ax11' 정의에 추가하여 마지막 서브 플롯의 크기를 늘릴 수 있습니다. , 1), colspan = 2)'. 이렇게하면 남아있는 공간을 사용하도록 그림이 확대됩니다. – DavidG

+0

"colspan"으로 결론을 내리지는 않았지만 도움을 많이 주셔서 감사합니다 :) – user3601754