Removing/Hiding 绘制灵活网格时,matplotlib 中的子图为空

Removing/Hiding empty subplots in matplotlib, when plotting a flexible grid

我正在使用 nilearn 通过大脑的 3D 图像文件沿轴绘制一系列切口。我的目标是制作一个灵活的功能,我可以根据需要更改切割的行数、列数和坐标范围。这样做的原因是我可以生成一个 .png 文件并将其用于可视化,例如直接在论文中。

所以基本上我使用嵌套循环来生成 matplotlib 子图的网格并用大脑图像填充它们。这些来自 nilearn 函数的一行代码,所以这不是问题。

我的问题是:有没有办法检测 hide/delete 空子图? 问题是,现在空的子图出现了一条错误消息,这似乎与 .png 文件混淆了 returns。 .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()