我想在 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))]
有什么帮助吗?
如果列表推导式做了不止一件事,它们很快就会变得不可读。此外,如果列表的内容根本没有被实际使用,那么使用列表推导式似乎被认为是不好的风格。
因此我提出以下建议
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')
关于:
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
是一个列表,而不是数组。
我可以对 Boxplot 做同样的事情吗,如果这很愚蠢,请不要评判我......我正在尝试。