Bird
Raised Fist0
Matplotlibdata~10 mins

Nested subplots with subfigures in Matplotlib - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Nested subplots with subfigures
Create Figure
↓
Add Subfigure 1
→Add Subplots in Subfigure 1
↓
Add Subfigure 2
→Add Subplots in Subfigure 2
↓
Plot data in each subplot
↓
Show Figure with nested subplots
Start by creating a main figure, then add subfigures inside it. Each subfigure can have its own grid of subplots. Finally, plot data in each subplot and display the figure.
Execution Sample
Matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
subfigs = fig.subfigures(1, 2)
ax1 = subfigs[0].subplots(2, 1)
ax2 = subfigs[1].subplots(1, 2)
ax1[0].plot([1, 2], [3, 4])
plt.show()
This code creates a figure with two subfigures side by side. The first subfigure has two rows of subplots, the second has two columns. It plots a simple line in the first subplot.
Execution Table
StepActionResult/StateNotes
1Create main figureFigure object createdEmpty figure ready
2Add 2 subfigures horizontallyTwo subfigure objects inside main figureSubfigures split figure into left and right parts
3Create 2-row subplots in left subfigureArray of 2 Axes objects in left subfigureVertical stack of plots
4Create 2-column subplots in right subfigureArray of 2 Axes objects in right subfigureHorizontal side-by-side plots
5Plot line on first subplot of left subfigureLine appears on ax1[0]Data plotted on first subplot
6Show figureWindow with nested subplots appearsAll subplots visible with layout
7EndExecution stopsAll plotting done
💡 All subplots created and plotted, figure displayed, program ends
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 5Final
figNoneFigure objectFigure objectFigure objectFigure objectFigure object
subfigsNoneArray of 2 subfiguresArray of 2 subfiguresArray of 2 subfiguresArray of 2 subfiguresArray of 2 subfigures
ax1NoneNoneArray of 2 Axes (vertical)Array of 2 Axes (vertical)Array of 2 Axes (vertical) with line on ax1[0]Array of 2 Axes (vertical) with line on ax1[0]
ax2NoneNoneNoneArray of 2 Axes (horizontal)Array of 2 Axes (horizontal)Array of 2 Axes (horizontal)
Key Moments - 3 Insights
Why do we create subfigures before subplots?
Subfigures act like containers inside the main figure. We add subplots inside these containers to organize plots in groups. See execution_table steps 2 and 3.
Can subfigures have different subplot layouts?
Yes, each subfigure can have its own grid size and shape. For example, left subfigure has 2 rows, right subfigure has 2 columns (execution_table steps 3 and 4).
What happens if we plot before creating subplots?
You need Axes objects to plot on. Without subplots, there is no place to draw. So plotting happens after subplots are created (step 5).
Visual Quiz - 3 Questions
Test your understanding
Look at the variable_tracker table. What is the value of 'ax1' after Step 3?
AArray of 2 Axes arranged vertically
BArray of 2 Axes arranged horizontally
CNone
DSingle Axes object
💡 Hint
Check the 'ax1' row under 'After Step 3' column in variable_tracker
According to the execution_table, at which step do we add subplots to the right subfigure?
AStep 2
BStep 4
CStep 3
DStep 5
💡 Hint
Look for the step describing subplots creation in the right subfigure in execution_table
If we skip creating subfigures and add subplots directly to the figure, how would the execution_table change?
AStep 5 would be missing
BNo change, subfigures are optional
CStep 2 would be missing, subplots created directly on figure
DFigure creation would fail
💡 Hint
Refer to execution_table step 2 about subfigure creation
Concept Snapshot
Nested subplots with subfigures:
- Create main figure with plt.figure()
- Add subfigures using fig.subfigures(rows, cols)
- Add subplots inside each subfigure with subfig.subplots(rows, cols)
- Plot data on each subplot Axes
- Show figure with plt.show()
Allows grouping plots visually inside one figure.
Full Transcript
This lesson shows how to create nested subplots using subfigures in matplotlib. First, a main figure is created. Then, subfigures are added inside the figure to divide it into sections. Each subfigure can have its own grid of subplots. We create subplots inside each subfigure and plot data on them. Finally, the figure is displayed showing all nested plots. Variables like fig, subfigs, ax1, and ax2 track the figure, subfigures, and subplot axes. Key moments include understanding why subfigures come before subplots and how each subfigure can have different layouts. The visual quiz tests understanding of variable states and execution steps. This method helps organize complex figures with grouped plots.

Practice

(1/5)
1. What is the main purpose of using fig.subfigures() in matplotlib?
easy
A. To add a single plot to a figure
B. To create large groups inside a figure that can hold their own smaller plots
C. To change the color of a plot
D. To save a figure as an image file

Solution

  1. Step 1: Understand the role of fig.subfigures()

    This method creates subfigures, which are large groups inside a main figure.
  2. Step 2: Recognize the use of subfigures

    Each subfigure can contain its own grid of smaller plots, helping organize complex layouts.
  3. Final Answer:

    To create large groups inside a figure that can hold their own smaller plots -> Option B
  4. Quick Check:

    Subfigures = large groups inside figure [OK]
Hint: Subfigures group plots inside a figure [OK]
Common Mistakes:
  • Thinking subfigures add only one plot
  • Confusing subfigures with saving figures
  • Assuming subfigures change plot colors
2. Which of the following is the correct way to create two subfigures side by side in matplotlib?
easy
A. fig.subplots(1, 2)
B. fig.subfigures(2, 1)
C. fig.subfigures(1, 2)
D. fig.subfigures(2, 2)

Solution

  1. Step 1: Understand subfigures layout parameters

    The parameters (rows, columns) define the grid of subfigures. For side by side, use 1 row and 2 columns.
  2. Step 2: Match parameters to options

    fig.subfigures(1, 2) uses fig.subfigures(1, 2), which creates 1 row and 2 columns, placing subfigures side by side.
  3. Final Answer:

    fig.subfigures(1, 2) -> Option C
  4. Quick Check:

    Side by side = 1 row, 2 columns [OK]
Hint: Rows first, columns second in subfigures() [OK]
Common Mistakes:
  • Swapping rows and columns
  • Using subplots() instead of subfigures()
  • Choosing more rows than needed
3. What will be the output shape of the axes array when running this code?
fig = plt.figure()
subfigs = fig.subfigures(2, 1)
ax1 = subfigs[0].subplots(1, 3)
ax2 = subfigs[1].subplots(2, 2)
print(ax1.shape, ax2.shape)
medium
A. (1, 3) (4,)
B. (3,) (4,)
C. (3,) (2, 2)
D. (1, 3) (2, 2)

Solution

  1. Step 1: Analyze subfigures and their subplot grids

    First subfigure has 1 row and 3 columns, so ax1 shape is (1, 3). Second subfigure has 2 rows and 2 columns, so ax2 shape is (2, 2).
  2. Step 2: Confirm shapes printed

    Printing ax1.shape and ax2.shape outputs (1, 3) and (2, 2) respectively.
  3. Final Answer:

    (1, 3) (2, 2) -> Option D
  4. Quick Check:

    Subplots shape = (rows, columns) [OK]
Hint: Shape matches (rows, columns) in subplots() [OK]
Common Mistakes:
  • Confusing flat arrays with 2D arrays
  • Mixing up rows and columns
  • Assuming subfigures affect shape differently
4. Identify the error in this code snippet for creating nested subplots with subfigures:
fig = plt.figure()
subfigs = fig.subfigures(1, 2)
ax = subfigs.subplots(2, 2)
medium
A. subfigs.subplots() should be called on each subfigure, not on the list
B. fig.subfigures() requires 3 arguments, missing one
C. subfigs is a list, so subfigs.subplots() is invalid
D. subfigures cannot have nested subplots

Solution

  1. Step 1: Understand the type of subfigs

    fig.subfigures(1, 2) returns a list or array of subfigure objects, not a single subfigure.
  2. Step 2: Correct method call for subplots

    We must call subplots() on each individual subfigure, not on the entire list subfigs.
  3. Final Answer:

    subfigs.subplots() should be called on each subfigure, not on the list -> Option A
  4. Quick Check:

    Call subplots() on single subfigure [OK]
Hint: Call subplots() on one subfigure, not list [OK]
Common Mistakes:
  • Calling subplots() on the list of subfigures
  • Assuming subfigures() needs 3 args
  • Thinking subfigures can't have subplots
5. You want to create a figure with 2 subfigures stacked vertically. The top subfigure should have a 2x2 grid of plots, and the bottom subfigure a single plot. Which code correctly achieves this?
hard
A. fig = plt.figure() subfigs = fig.subfigures(2, 1) axs_top = subfigs[0].subplots(2, 2) axs_bottom = subfigs[1].subplots(1, 1)
B. fig = plt.figure() subfigs = fig.subfigures(1, 2) axs_top = subfigs[0].subplots(2, 2) axs_bottom = subfigs[1].subplots(1, 1)
C. fig = plt.figure() subfigs = fig.subfigures(2, 1) axs_top = subfigs.subplots(2, 2) axs_bottom = subfigs.subplots(1, 1)
D. fig = plt.figure() subfigs = fig.subfigures(1, 2) axs_top = subfigs.subplots(2, 2) axs_bottom = subfigs.subplots(1, 1)

Solution

  1. Step 1: Set subfigures layout vertically

    Two subfigures stacked vertically means 2 rows and 1 column, so fig.subfigures(2, 1).
  2. Step 2: Create subplots inside each subfigure

    Top subfigure gets a 2x2 grid, bottom subfigure gets a single plot (1x1). Call subplots() on each subfigure individually.
  3. Final Answer:

    fig = plt.figure() subfigs = fig.subfigures(2, 1) axs_top = subfigs[0].subplots(2, 2) axs_bottom = subfigs[1].subplots(1, 1) -> Option A
  4. Quick Check:

    Vertical stack = (2,1), call subplots() on each subfigure [OK]
Hint: Vertical stack = (2,1), subplots() on each subfigure [OK]
Common Mistakes:
  • Using (1,2) for vertical stacking
  • Calling subplots() on the list of subfigures
  • Not matching subplot grids to subfigures
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard