📖 Scenario: You are creating a report with multiple charts arranged in a complex layout. Using matplotlib's GridSpec, you will place different plots in specific grid positions to make the report clear and organized.
🎯 Goal: Build a figure with a 3x3 grid layout using GridSpec. Place three plots: a line plot spanning the top row, a scatter plot in the bottom-left cell, and a bar plot spanning the bottom-right two cells.
📋 What You'll Learn
Create a 3x3 GridSpec layout
Place a line plot spanning the entire top row
Place a scatter plot in the bottom-left cell
Place a bar plot spanning the bottom-right two cells
Use plt.show() to display the figure
💡 Why This Matters
🌍 Real World
Data scientists often need to create reports with multiple charts arranged neatly to compare data visually.
💼 Career
Knowing how to use GridSpec helps you build professional and clear visualizations for presentations and dashboards.
Progress0 / 4 steps
1
Create a 3x3 GridSpec layout
Import matplotlib.pyplot as plt and GridSpec from matplotlib.gridspec. Then create a figure called fig with size (8, 6) and a GridSpec object called gs with 3 rows and 3 columns.
Matplotlib
Hint
Use plt.figure(figsize=(8, 6)) to create the figure and GridSpec(3, 3, figure=fig) to create the grid layout.
2
Add a line plot spanning the top row
Create an axes called ax1 using fig.add_subplot(gs[0, :]) to span the entire top row. Plot a line with x values [0, 1, 2, 3] and y values [10, 20, 25, 30] on ax1.
Matplotlib
Hint
Use gs[0, :] to select the entire first row for the line plot.
3
Add a scatter plot in the bottom-left cell
Create an axes called ax2 using fig.add_subplot(gs[2, 0]) for the bottom-left cell. Plot a scatter plot with x values [1, 2, 3] and y values [4, 5, 6] on ax2.
Matplotlib
Hint
Use gs[2, 0] to select the bottom-left cell for the scatter plot.
4
Add a bar plot spanning the bottom-right two cells and display the figure
Create an axes called ax3 using fig.add_subplot(gs[2, 1:]) to span the bottom-right two cells. Plot a bar chart with categories ["A", "B", "C"] and values [5, 7, 3] on ax3. Finally, use plt.show() to display the figure.
Matplotlib
Hint
Use gs[2, 1:] to select the bottom-right two cells for the bar plot. Use plt.show() to display the figure.
Practice
(1/5)
1. What is the main purpose of using GridSpec in matplotlib?
easy
A. To divide a figure into a flexible grid for placing subplots.
B. To change the color of the plot background.
C. To add titles to individual subplots automatically.
D. To save the figure in different file formats.
Solution
Step 1: Understand GridSpec's role
GridSpec is designed to split a figure into rows and columns for subplot placement.
Step 2: Compare options
Only To divide a figure into a flexible grid for placing subplots. describes this grid division purpose; others describe unrelated features.
Final Answer:
To divide a figure into a flexible grid for placing subplots. -> Option A
Quick Check:
GridSpec = flexible grid layout [OK]
Hint: GridSpec = grid layout for subplots [OK]
Common Mistakes:
Confusing GridSpec with styling or saving functions
Thinking GridSpec adds titles automatically
Assuming GridSpec changes colors
2. Which of the following is the correct way to create a 2x3 GridSpec object named gs?
easy
A. gs = GridSpec(3, 2)
B. gs = GridSpec(2, 3)
C. gs = GridSpec(rows=3, cols=2)
D. gs = GridSpec(2)
Solution
Step 1: Recall GridSpec syntax
GridSpec takes number of rows first, then columns: GridSpec(nrows, ncols).
Step 2: Match 2 rows and 3 columns
gs = GridSpec(2, 3) uses GridSpec(2, 3), which is correct for 2 rows and 3 columns.
Final Answer:
gs = GridSpec(2, 3) -> Option B
Quick Check:
GridSpec(rows, cols) = (2, 3) [OK]
Hint: Rows first, columns second in GridSpec() [OK]
Common Mistakes:
Swapping rows and columns order
Using keyword arguments incorrectly
Passing only one number instead of two
3. What will be the shape of the subplot created by fig.add_subplot(gs[0:2, 1]) if gs = GridSpec(3, 3)?
medium
A. A subplot spanning rows 0 and 1 in column 1 (tall and narrow).
B. A subplot in row 0, column 1 only (small square).
C. A subplot spanning all rows in column 1 (very tall).
D. A subplot spanning rows 1 and 2 in column 1.
Solution
Step 1: Understand slicing in GridSpec
gs[0:2, 1] selects rows 0 and 1 (two rows) in column 1.
Step 2: Determine subplot shape
It creates a subplot spanning two rows vertically and one column horizontally, so tall and narrow.
Final Answer:
A subplot spanning rows 0 and 1 in column 1 (tall and narrow). -> Option A
Quick Check:
gs[0:2,1] = rows 0-1, col 1 [OK]
Hint: Slice rows then columns in GridSpec to get subplot size [OK]
Common Mistakes:
Confusing row and column indices
Assuming slice includes row 2
Thinking it spans all rows
4. Identify the error in this code snippet using GridSpec:
B. SyntaxError due to missing parentheses in GridSpec.
C. IndexError because row index 2 is out of range for 2 rows.
D. No error; code runs fine.
Solution
Step 1: Check GridSpec size
GridSpec(2, 2) creates 2 rows indexed 0 and 1 only.
Step 2: Check subplot indexing
gs[2, 1] tries to access row 2, which does not exist, causing IndexError.
Final Answer:
IndexError because row index 2 is out of range for 2 rows. -> Option C
Quick Check:
Index out of range = IndexError [OK]
Hint: Check GridSpec row/column indices start at 0 [OK]
Common Mistakes:
Assuming indices start at 1
Confusing syntax errors with index errors
Ignoring zero-based indexing
5. You want to create a figure with 3 subplots: one large plot on the left spanning all rows, and two smaller plots stacked vertically on the right. Which GridSpec slicing correctly achieves this layout for gs = GridSpec(2, 2)?
hard
A. Left plot: gs[0, :], Right top: gs[1, 0], Right bottom: gs[1, 1]
B. Left plot: gs[:, 1], Right top: gs[0, 0], Right bottom: gs[1, 0]
C. Left plot: gs[0, 0], Right top: gs[0, 1], Right bottom: gs[1, 1]
D. Left plot: gs[:, 0], Right top: gs[0, 1], Right bottom: gs[1, 1]
Solution
Step 1: Understand layout goal
Left plot spans all rows in first column; right side has two stacked plots in second column.
Step 2: Match slicing to layout
gs[:, 0] selects all rows in column 0 (left plot). gs[0, 1] and gs[1, 1] select top and bottom right plots.
Final Answer:
Left plot: gs[:, 0], Right top: gs[0, 1], Right bottom: gs[1, 1] -> Option D
Quick Check:
Use colon for full rows, index for columns [OK]
Hint: Use colon to span all rows or columns in GridSpec [OK]
Common Mistakes:
Mixing row and column indices
Using single indices instead of slices for spanning
Swapping left and right columns
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.