We use multiple images in a subplot grid to compare pictures side by side easily. It helps us see differences or patterns quickly.
Multiple images in subplot grid in Matplotlib
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Matplotlib
import matplotlib.pyplot as plt fig, axes = plt.subplots(nrows, ncols) for i, ax in enumerate(axes.flat): ax.imshow(image_list[i]) ax.axis('off') plt.show()
plt.subplots(nrows, ncols) creates a grid of plots.
Use axes.flat to loop through all subplot axes easily.
Examples
Matplotlib
fig, axes = plt.subplots(1, 2) axes[0].imshow(img1) axes[1].imshow(img2) plt.show()
Matplotlib
fig, axes = plt.subplots(2, 2) for i, ax in enumerate(axes.flat): ax.imshow(images[i]) ax.axis('off') plt.show()
Sample Program
This code creates 4 colored square images and shows them in a 2x2 grid with titles and no axes.
Matplotlib
import matplotlib.pyplot as plt import numpy as np # Create 4 simple images with different colors images = [] colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 0)] # Red, Green, Blue, Yellow for color in colors: img = np.ones((10, 10, 3)) * color images.append(img) fig, axes = plt.subplots(2, 2, figsize=(6, 6)) for i, ax in enumerate(axes.flat): ax.imshow(images[i]) ax.axis('off') ax.set_title(f'Image {i+1}') plt.tight_layout() plt.show()
Important Notes
Use ax.axis('off') to hide axis ticks and labels for cleaner image display.
Adjust figsize to control the overall size of the subplot grid.
Use plt.tight_layout() to prevent overlapping titles or images.
Summary
Multiple images can be shown in a grid using plt.subplots().
Loop through axes with axes.flat to place images easily.
Turn off axes and add titles for better presentation.
Practice
1. What is the main purpose of using
plt.subplots when displaying multiple images in a grid?easy
Solution
Step 1: Understand the role of
plt.subplotsplt.subplotscreates a figure and a grid of axes (subplots) to place multiple plots or images.Step 2: Connect to displaying images
Each axis in the grid can show one image, so it helps organize multiple images neatly.Final Answer:
To create a grid of axes where each image can be shown separately -> Option CQuick Check:
plt.subplots = grid for images [OK]
Hint: Remember: plt.subplots makes the grid for multiple images [OK]
Common Mistakes:
- Thinking plt.subplots loads or saves images
- Confusing plt.subplots with image display functions
- Assuming plt.subplots changes image colors
2. Which of the following is the correct way to loop through all axes in a subplot grid to plot images?
easy
Solution
Step 1: Identify the axes object type
Whenplt.subplotscreates multiple axes, they are stored in an array or matrix.Step 2: Use
axes.flatto flatten the array for loopingaxes.flatlets you loop over all axes in a simple 1D way.Final Answer:
for ax in axes.flat: -> Option AQuick Check:
axes.flat loops all axes [OK]
Hint: Use axes.flat to loop all subplot axes easily [OK]
Common Mistakes:
- Using non-existent methods like axes.grid()
- Trying to loop axes directly without flattening
- Confusing axes with image objects
3. What will be the output of this code snippet?
import matplotlib.pyplot as plt
import numpy as np
images = [np.random.rand(5,5) for _ in range(4)]
fig, axes = plt.subplots(2, 2)
for ax, img in zip(axes.flat, images):
ax.imshow(img, cmap='gray')
ax.axis('off')
plt.show()medium
Solution
Step 1: Understand the code flow
Four random 5x5 images are created and stored in a list. A 2x2 subplot grid is created.Step 2: Loop through axes and images
Each axis in the 2x2 grid shows one image with grayscale colormap and axes turned off.Final Answer:
A 2x2 grid showing 4 random grayscale images without axes -> Option BQuick Check:
Loop + imshow + axis off = grid of images [OK]
Hint: Loop axes.flat with images to plot all in grid [OK]
Common Mistakes:
- Expecting only one image to show
- Thinking axes.flat is not iterable
- Forgetting to turn axes off
4. Identify the error in this code that tries to display 3 images in a 2x2 grid:
fig, axes = plt.subplots(2, 2)
images = [img1, img2, img3]
for i in range(3):
axes[i].imshow(images[i])
axes[i].axis('off')medium
Solution
Step 1: Check the type of axes
plt.subplots(2, 2)returns a 2D array of axes, so axes[i] is invalid indexing.Step 2: Correct way to access axes
Useaxes.flat[i]or flatten axes before indexing to access each subplot.Final Answer:
axes is a 2D array, so axes[i] causes an error -> Option DQuick Check:
axes 2D array needs flat for 1D access [OK]
Hint: Use axes.flat to index subplots in 1D [OK]
Common Mistakes:
- Indexing 2D axes array as 1D
- Assuming images list is empty
- Misusing axis('off') method
5. You want to display 6 images in a 2x3 grid with titles on each subplot. Which code snippet correctly does this?
hard
Solution
Step 1: Create correct subplot grid
plt.subplots(2, 3)creates 2 rows and 3 columns, perfect for 6 images.Step 2: Loop through axes.flat and images with index
Usingaxes.flatflattens the 2D axes array for easy looping. Adding index withrange(6)helps set titles.Step 3: Set image, title, and turn off axes
Each axis shows one image, sets a title with number, and hides axis ticks.Final Answer:
fig, axes = plt.subplots(2, 3) for ax, img, i in zip(axes.flat, images, range(6)): ax.imshow(img) ax.set_title(f'Image {i+1}') ax.axis('off') -> Option AQuick Check:
axes.flat + set_title + axis off = correct grid [OK]
Hint: Use axes.flat and zip(images, range) for titles [OK]
Common Mistakes:
- Indexing 2D axes as 1D without flat
- Using wrong subplot shape for 6 images
- Calling non-existent title() method
