问题描述
我正在使用nilearn通过大脑的3D图像文件沿轴绘制一系列切割。我的目标是创建一个灵活的功能,在其中可以随意更改切割的行数,列数和坐标范围。这样做的原因是,我可以生成一个.png文件并将其用于可视化,例如直接在纸上。
因此,基本上,我使用嵌套循环来生成matplotlib子图的网格,并用脑图像填充它们。这些来自nilearn函数的一行代码,所以这不是问题。
我的问题是:有没有办法检测和隐藏/删除空子图? 问题在于,现在空子图带有一条错误消息,似乎与返回的.png文件混淆了。空子图也显示在.png文件中,情况并非如此。
这是我的代码:
i = -55
j = 55
rows = 5
cols = 5
k = np.ceil((abs(i)+j)/(rows*cols))
cuts = np.arange(i,j,k)
rsn_img = 'rsn_img.png'
fig,axes = plt.subplots(rows,cols,figsize=(15,10))
for r in range(rows):
for c in range(cols):
display=plotting.plot_stat_map(rsn_four,display_mode='x',axes=axes[r,c],cut_coords=[cuts[r*cols+c]],threshold=2)
print(f'plotting at index [ {r},{c}]')
display.savefig(rsn_img)
这是输出:
我应该将未填充的子图删除。 感谢您的提前帮助!
解决方法
我假设您知道要绘制的图像N
的数量。
这就是我的写法:
i = -55
j = 55
cols = 5
rows = 5
k = np.ceil((abs(i)+j)/(rows*cols))
cuts = np.arange(i,j,k)
N = len(cuts)
fig,axs = plt.subplots(rows,cols)
for ax,cut in zip(axs.flat,cuts):
display=plotting.plot_stat_map(rsn_four,display_mode='x',axes=ax,cut_coords=cut,threshold=2)
# remove unused axes
for ax in axs.flat[N:]:
ax.remove()