Сетка изображений с помощью цикла в Jupyter-Notebook. Как? - PullRequest
0 голосов
/ 04 мая 2019

Я хочу показать изображения var_1.png,...,var_40.png в матричном формате 2x3 внутри ноутбука Jupyter. enter image description here Однако мне удается сделать это только вручную:

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))]

Некоторая помощь?

Ответы [ 2 ]

1 голос
/ 04 мая 2019

Постижения списков быстро становятся нечитаемыми, если они делают больше, чем одну вещь.Также кажется, что считается плохим стилем использовать списки, если содержимое списка вообще не используется.

Поэтому я бы предложил следующее

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 голос
/ 04 мая 2019

А как же:

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 - это список, а не массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...