Bird
Raised Fist0
Matplotlibdata~30 mins

Multiple images in subplot grid in Matplotlib - Mini Project: Build & Apply

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Multiple images in subplot grid
📖 Scenario: You are working as a data scientist who needs to display multiple images side by side for easy comparison. This is common when analyzing photos, medical scans, or satellite images.
🎯 Goal: Create a grid of subplots using matplotlib and display four different images in this grid.
📋 What You'll Learn
Create a list called images containing four 2D numpy arrays representing grayscale images.
Create a variable called fig, axes using plt.subplots(2, 2) to make a 2x2 grid of subplots.
Use a for loop with variables ax and img to iterate over axes.flat and images simultaneously.
Inside the loop, display each image on its subplot using ax.imshow(img, cmap='gray').
Turn off axis ticks and labels for each subplot using ax.axis('off').
Finally, use plt.show() to display the figure.
💡 Why This Matters
🌍 Real World
Displaying multiple images side by side helps compare different photos or scans quickly, useful in medical imaging, satellite photo analysis, or quality control.
💼 Career
Data scientists and analysts often need to visualize multiple images together to spot patterns, differences, or anomalies.
Progress0 / 4 steps
1
Create four sample images
Create a list called images containing four 5x5 numpy arrays with these exact values: first is all zeros, second is all ones, third is a 5x5 identity matrix, and fourth is a 5x5 matrix of twos.
Matplotlib
Hint

Use np.zeros, np.ones, np.eye, and np.full to create the arrays.

2
Create a 2x2 subplot grid
Import matplotlib.pyplot as plt. Then create a 2x2 grid of subplots using fig, axes = plt.subplots(2, 2).
Matplotlib
Hint

Use plt.subplots(2, 2) to create the grid.

3
Display images in the subplot grid
Use a for loop with variables ax and img to iterate over axes.flat and images simultaneously. Inside the loop, display each image on its subplot using ax.imshow(img, cmap='gray') and turn off axis ticks and labels with ax.axis('off').
Matplotlib
Hint

Use zip(axes.flat, images) to loop over both lists together.

4
Show the figure with images
Add a line to display the figure using plt.show().
Matplotlib
Hint

Use plt.show() to display the plot window.

Practice

(1/5)
1. What is the main purpose of using plt.subplots when displaying multiple images in a grid?
easy
A. To change the color of images
B. To load images from files automatically
C. To create a grid of axes where each image can be shown separately
D. To save images to disk

Solution

  1. Step 1: Understand the role of plt.subplots

    plt.subplots creates a figure and a grid of axes (subplots) to place multiple plots or images.
  2. Step 2: Connect to displaying images

    Each axis in the grid can show one image, so it helps organize multiple images neatly.
  3. Final Answer:

    To create a grid of axes where each image can be shown separately -> Option C
  4. Quick 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
A. for ax in axes.flat:
B. for ax in axes.grid():
C. for ax in axes.loop():
D. for ax in axes.images():

Solution

  1. Step 1: Identify the axes object type

    When plt.subplots creates multiple axes, they are stored in an array or matrix.
  2. Step 2: Use axes.flat to flatten the array for looping

    axes.flat lets you loop over all axes in a simple 1D way.
  3. Final Answer:

    for ax in axes.flat: -> Option A
  4. Quick 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
A. A single image shown in one plot
B. A 2x2 grid showing 4 random grayscale images without axes
C. An error because axes.flat is not iterable
D. A 2x2 grid with empty plots and no images

Solution

  1. Step 1: Understand the code flow

    Four random 5x5 images are created and stored in a list. A 2x2 subplot grid is created.
  2. Step 2: Loop through axes and images

    Each axis in the 2x2 grid shows one image with grayscale colormap and axes turned off.
  3. Final Answer:

    A 2x2 grid showing 4 random grayscale images without axes -> Option B
  4. Quick 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
A. axis('off') is not a valid method
B. images list is empty
C. imshow cannot display images in subplots
D. axes is a 2D array, so axes[i] causes an error

Solution

  1. Step 1: Check the type of axes

    plt.subplots(2, 2) returns a 2D array of axes, so axes[i] is invalid indexing.
  2. Step 2: Correct way to access axes

    Use axes.flat[i] or flatten axes before indexing to access each subplot.
  3. Final Answer:

    axes is a 2D array, so axes[i] causes an error -> Option D
  4. Quick 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
A. 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')
B. fig, axes = plt.subplots(3, 2) for i in range(6): axes[i].imshow(images[i]) axes[i].title(f'Image {i}') axes[i].axis('off')
C. fig, axes = plt.subplots(2, 3) for i in range(6): axes[i].imshow(images[i]) axes[i].set_title('Image') axes[i].axis('off')
D. fig, axes = plt.subplots(2, 3) for ax, img in zip(axes, images): ax.imshow(img) ax.set_title('Image') ax.axis('off')

Solution

  1. Step 1: Create correct subplot grid

    plt.subplots(2, 3) creates 2 rows and 3 columns, perfect for 6 images.
  2. Step 2: Loop through axes.flat and images with index

    Using axes.flat flattens the 2D axes array for easy looping. Adding index with range(6) helps set titles.
  3. Step 3: Set image, title, and turn off axes

    Each axis shows one image, sets a title with number, and hides axis ticks.
  4. 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 A
  5. Quick 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