2016-10-17 9 views
2

Мне нужно нарисовать фигуру с 11 подпотами, как вы можете видеть ниже. Но поскольку это нечетное число, я не знаю, как обрабатывать подзаголовок (4,3,12), чтобы удалить его ... и поместить 2 последних графика в центр. . Кроме того, я хотел бы добавить размер подзадачи в качестве пространство слишком важно. Код ниже.Matplotlib нечетные подсети

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/ EDIT: И это: 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

Спасибо за ваш вклад! и если вы хотите сосредоточить 2 последних? – user3601754

+1

Я не уверен в центрировании нижних двух, но вы можете увеличить размер последнего подзаголовка, добавив 'colspan = 2' в определение' ax11', например 'ax11 = plt.subplot2grid ((4, 3), (3 , 1), colspan = 2) '. Это позволит расширить фигуру, чтобы использовать оставшееся пространство. – DavidG

+0

Не совсем заключительный с «colspan», но большое спасибо за вашу помощь :) – user3601754

 Смежные вопросы

  • Нет связанных вопросов^_^