在 Jupyter-Notebook 中使用循环的图像网格。怎么办?

问题描述 投票:0回答:3

我想在 Jupyter Notebook 中以 2x3 矩阵格式显示图像

var_1.png,...,var_40.png
但是,我只能手动完成:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

%matplotlib inline

img1=mpimg.imread('Variable_8.png')
img2=mpimg.imread('Variable_17.png')
img3=mpimg.imread('Variable_18.png')
          ...

fig, ((ax1, ax2, ax3), (ax4,ax5,ax6)) = plt.subplots(2, 3, sharex=True, sharey=True) 

ax1.imshow(img1)
ax1.axis('off')
ax2.imshow(img2)
ax2.axis('off')
   ....

我想要更干净的东西。类似于指定

的列表理解
image=[img(i)=mpimg.imread('Variable_(i).png') for i in [8,17,28, ..]

[ax[j].imshow(img(j)),ax[j].axis('off') for j in range(len(image))]

有什么帮助吗?

python image matplotlib grid jupyter-notebook
3个回答
2
投票

如果列表推导式做了不止一件事,它们很快就会变得不可读。此外,如果列表的内容根本没有被实际使用,那么使用列表推导式似乎被认为是不好的风格。

因此我提出以下建议

import matplotlib.pyplot as plt

images = [plt.imread(f"Variable_{i}.png") for i in [8,17,28,29,31,35]]

fig, axes = plt.subplots(2, 3, sharex=True, sharey=True) 

for img, ax in zip(images, axes.flat):
    ax.imshow(img)
    ax.axis('off')

1
投票

关于:

imgs_names = ...
imgs = [mpimg.imread(name) for name in imgs_names]

n_rows = 2
n_cols = 3
fig, axes = subplots(n_rows, n_cols)

[(axes[i][j].imshow(imgs[i*n_cols + j]), axes[i][j].axis('off')) for i in range(n_rows) for j in range(n_cols)]

Rmk:如果

n_cols=1
n_rows=1
则不起作用,因为
axes
是一个列表,而不是数组。


0
投票

我可以对 Boxplot 做同样的事情吗,如果这很愚蠢,请不要评判我......我正在尝试。

© www.soinside.com 2019 - 2024. All rights reserved.