Search code examples
pythonimagematplotlibgridjupyter-notebook

Grid of images using a loop in Jupyter-Notebook. How?


I want to show images var_1.png,...,var_40.png in a 2x3 matrix format inside a Jupyter Notebook. enter image description here However, I only manage to do it manually:

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')
   ....

I want something cleaner. Something like a list comprehension that specifies

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

Some help?


Solution

  • List comprehensions quickly become unreadable if there is more than one thing they do. Also it appears it is considered bad style to use list comprehensions if the content of the list is not actually used at all.

    Hence I would propose the following

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