Create a Grid of Plots Using plt.subplots with Rows and Columns
📖 Scenario: You are a data analyst who needs to visualize multiple sets of data side by side. To do this neatly, you want to create a grid of plots using matplotlib.
🎯 Goal: Build a 2 by 2 grid of plots using plt.subplots with rows and columns, then plot simple line charts on each subplot.
📋 What You'll Learn
Use plt.subplots to create a figure with 2 rows and 2 columns of subplots
Plot a simple line on each subplot using the provided data
Use the variables fig and axes exactly as shown
Print the figure and axes objects to confirm creation
💡 Why This Matters
🌍 Real World
Creating multiple plots in a grid helps compare different data sets side by side, like sales over months for different products.
💼 Career
Data scientists and analysts often use subplot grids to present multiple visual insights clearly in reports and presentations.
Progress0 / 4 steps
1
Create a 2x2 grid of subplots
Write code to create a figure and a 2 by 2 grid of subplots using plt.subplots. Assign the outputs to variables fig and axes.
Matplotlib
Hint
Use plt.subplots(nrows=2, ncols=2) and assign the result to fig, axes.
2
Prepare data for plotting
Create a list called data containing four lists of numbers: [1, 2, 3], [3, 2, 1], [1, 3, 2], and [2, 1, 3].
Matplotlib
Hint
Make a list named data with exactly these four lists inside.
3
Plot each data list on the subplots
Use a for loop with variables ax and d to iterate over axes.flat and data simultaneously. Inside the loop, call ax.plot(d) to plot the data on each subplot.
Matplotlib
Hint
Use zip(axes.flat, data) to loop over both together and plot each data list on its subplot.
4
Display the figure and print objects
Print the variables fig and axes on separate lines. Then call plt.show() to display the plots.
Matplotlib
Hint
Use print(fig) and print(axes) to show the objects, then plt.show() to display the figure.
Practice
(1/5)
1. What does plt.subplots(2, 3) create in matplotlib?
easy
A. A figure with 2 rows and 3 columns of subplots
B. A figure with 3 rows and 2 columns of subplots
C. A single plot with size 2x3 inches
D. A figure with 6 rows and 1 column of subplots
Solution
Step 1: Understand plt.subplots parameters
The first parameter is the number of rows, the second is columns.
Step 2: Apply to given code
plt.subplots(2, 3) means 2 rows and 3 columns of subplots.
Final Answer:
A figure with 2 rows and 3 columns of subplots -> Option A
Quick Check:
rows=2, columns=3 = B [OK]
Hint: First number = rows, second = columns in plt.subplots [OK]
Common Mistakes:
Confusing rows and columns order
Thinking parameters set figure size
Assuming single plot created
2. Which of the following is the correct syntax to create a 3x1 subplot grid using plt.subplots?
easy
A. fig, axes = plt.subplots(1, 3)
B. fig, axes = plt.subplots(3)
C. fig, axes = plt.subplots(3, 1)
D. fig, axes = plt.subplots(rows=3, cols=1)
Solution
Step 1: Recall plt.subplots parameter order
The first argument is rows, second is columns.
Step 2: Match to 3 rows and 1 column
plt.subplots(3, 1) creates 3 rows and 1 column.
Final Answer:
fig, axes = plt.subplots(3, 1) -> Option C
Quick Check:
3 rows, 1 column = C [OK]
Hint: Remember: plt.subplots(rows, columns) order matters [OK]
Common Mistakes:
Swapping rows and columns
Using single number for both dimensions
Using keyword arguments incorrectly
3. What is the shape of axes returned by fig, axes = plt.subplots(2, 2)?
medium
A. A 1D array with 4 axes objects
B. A 2D array with shape (2, 2) of axes objects
C. A list of 2 axes objects
D. A single axes object
Solution
Step 1: Understand axes shape for multiple rows and columns
When rows and columns are more than 1, axes is a 2D array matching shape.
Step 2: Apply to plt.subplots(2, 2)
axes will be a 2x2 array of axes objects.
Final Answer:
A 2D array with shape (2, 2) of axes objects -> Option B
C. AttributeError: 'AxesSubplot' object has no attribute 'plot'
D. IndexError: index 2 is out of bounds for axis 0 with size 2
Solution
Step 1: Check axes shape from plt.subplots(2, 2)
axes is a 2x2 array with indices 0 and 1 for rows and columns.
Step 2: Analyze axes[2, 0] access
Index 2 for rows is out of bounds since max index is 1.
Final Answer:
IndexError: index 2 is out of bounds for axis 0 with size 2 -> Option D
Quick Check:
axes shape (2,2), index 2 invalid [OK]
Hint: Check axes array shape before indexing [OK]
Common Mistakes:
Using invalid indices beyond shape
Confusing axes as list instead of array
Expecting no error on wrong index
5. You want to create a 2x3 grid of subplots and plot a line on each subplot with data from a list of 6 arrays. Which code correctly accesses each subplot to plot inside a nested loop?
hard
A. for i in range(2):
for j in range(3):
axes[i][j].plot(data[i*3 + j])
B. for i in range(2):
for j in range(3):
axes[i, j].plot(data[i + j])
C. for i in range(3):
for j in range(2):
axes[i][j].plot(data[i*2 + j])
D. for i in range(2):
for j in range(3):
axes[j][i].plot(data[i*3 + j])
Solution
Step 1: Understand axes shape and indexing
plt.subplots(2, 3) creates axes as a 2x3 array, indexed as axes[row][col].
Step 2: Correctly map data list to subplot indices
Data index = row * number_of_columns + column = i*3 + j matches subplot position.
Final Answer:
for i in range(2):
for j in range(3):
axes[i][j].plot(data[i*3 + j]) -> Option A
Quick Check:
axes[row][col], data index = row*cols + col [OK]
Hint: Use axes[row][col] and data index = row*cols + col [OK]
Common Mistakes:
Swapping row and column loops
Incorrect data indexing
Using axes[j][i] instead of axes[i][j]
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.