Nested subplots with subfigures help you organize multiple plots clearly in one figure. This makes it easier to compare related charts side by side.
Nested subplots with subfigures in Matplotlib
fig = plt.figure() subfigs = fig.subfigures(nrows, ncols) ax = subfigs[row, col].subplots(nrows, ncols)
fig.subfigures() creates big sections inside the main figure.
Each subfigure can have its own subplots() grid inside it.
fig = plt.figure() subfigs = fig.subfigures(1, 2) ax1 = subfigs[0].subplots() ax2 = subfigs[1].subplots()
fig = plt.figure() subfigs = fig.subfigures(2, 1) ax1 = subfigs[0].subplots(2, 1) ax2 = subfigs[1].subplots(1, 2)
This code creates a figure with two subfigures side by side. The left subfigure has two line plots stacked vertically. The right subfigure has two scatter plots arranged horizontally. Each subfigure has its own title.
import matplotlib.pyplot as plt import numpy as np # Create main figure fig = plt.figure(constrained_layout=True, figsize=(8, 6)) # Create 2 subfigures side by side subfigs = fig.subfigures(1, 2, wspace=0.07) # Left subfigure with 2 rows of plots x = np.linspace(0, 10, 100) ax_left = subfigs[0].subplots(2, 1) ax_left[0].plot(x, np.sin(x)) ax_left[0].set_title('Sine Wave') ax_left[1].plot(x, np.cos(x), 'r') ax_left[1].set_title('Cosine Wave') # Right subfigure with 2 columns of plots ax_right = subfigs[1].subplots(1, 2) ax_right[0].scatter(x, np.sin(x)) ax_right[0].set_title('Sine Scatter') ax_right[1].scatter(x, np.cos(x), color='orange') ax_right[1].set_title('Cosine Scatter') # Set main titles for subfigures subfigs[0].suptitle('Trigonometric Line Plots') subfigs[1].suptitle('Trigonometric Scatter Plots') plt.show()
Use constrained_layout=True in plt.figure() to avoid overlapping labels.
Subfigures help keep related plots grouped and easier to read.
You can customize spacing between subfigures with wspace and hspace.
Nested subplots with subfigures organize multiple plots clearly inside one figure.
Use fig.subfigures() to create big sections, then add subplots inside each.
This method improves readability and layout control for complex visualizations.
Practice
fig.subfigures() in matplotlib?Solution
Step 1: Understand the role of
This method creates subfigures, which are large groups inside a main figure.fig.subfigures()Step 2: Recognize the use of subfigures
Each subfigure can contain its own grid of smaller plots, helping organize complex layouts.Final Answer:
To create large groups inside a figure that can hold their own smaller plots -> Option BQuick Check:
Subfigures = large groups inside figure [OK]
- Thinking subfigures add only one plot
- Confusing subfigures with saving figures
- Assuming subfigures change plot colors
Solution
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.Step 2: Match parameters to options
fig.subfigures(1, 2) usesfig.subfigures(1, 2), which creates 1 row and 2 columns, placing subfigures side by side.Final Answer:
fig.subfigures(1, 2) -> Option CQuick Check:
Side by side = 1 row, 2 columns [OK]
- Swapping rows and columns
- Using subplots() instead of subfigures()
- Choosing more rows than needed
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)
Solution
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).Step 2: Confirm shapes printed
Printing ax1.shape and ax2.shape outputs (1, 3) and (2, 2) respectively.Final Answer:
(1, 3) (2, 2) -> Option DQuick Check:
Subplots shape = (rows, columns) [OK]
- Confusing flat arrays with 2D arrays
- Mixing up rows and columns
- Assuming subfigures affect shape differently
fig = plt.figure() subfigs = fig.subfigures(1, 2) ax = subfigs.subplots(2, 2)
Solution
Step 1: Understand the type of subfigs
fig.subfigures(1, 2) returns a list or array of subfigure objects, not a single subfigure.Step 2: Correct method call for subplots
We must call subplots() on each individual subfigure, not on the entire list subfigs.Final Answer:
subfigs.subplots() should be called on each subfigure, not on the list -> Option AQuick Check:
Call subplots() on single subfigure [OK]
- Calling subplots() on the list of subfigures
- Assuming subfigures() needs 3 args
- Thinking subfigures can't have subplots
Solution
Step 1: Set subfigures layout vertically
Two subfigures stacked vertically means 2 rows and 1 column, sofig.subfigures(2, 1).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.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 AQuick Check:
Vertical stack = (2,1), call subplots() on each subfigure [OK]
- Using (1,2) for vertical stacking
- Calling subplots() on the list of subfigures
- Not matching subplot grids to subfigures
Ready to prove it?
Pass the test and this pattern moves unknown
