Bird
Raised Fist0
Matplotlibdata~10 mins

Unequal subplot sizes in Matplotlib - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Unequal subplot sizes
Start: Create Figure
↓
Define GridSpec with unequal ratios
↓
Add subplot 1 with larger size
↓
Add subplot 2 with smaller size
↓
Plot data on each subplot
↓
Show figure with unequal subplot sizes
We create a figure, define a grid layout with different size ratios, add subplots accordingly, plot data, and display the figure.
Execution Sample
Matplotlib
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure()
gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1])
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax1.plot([1,2,3], [1,4,9])
ax2.plot([1,2,3], [1,2,3])
plt.show()
This code creates two subplots side by side with the first subplot three times wider than the second.
Execution Table
StepActionObject CreatedSize/RatioPlot DataOutput
1Create figureFigureFull canvasNoneFigure object ready
2Define GridSpecGridSpec1 row, 2 cols, width_ratios=[3,1]NoneGrid layout set
3Add subplot ax1AxesSubplot ax1Width ratio 3 unitsPlot y=x^2Left large subplot created
4Add subplot ax2AxesSubplot ax2Width ratio 1 unitPlot y=xRight smaller subplot created
5Display figureFigure with 2 subplotsUnequal widthsBoth plots visibleFigure shown on screen
💡 All steps complete, figure displayed with unequal subplot sizes.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
figNoneFigure object createdFigure with GridSpecFigure with 2 subplotsFigure ready to show
gsNoneGridSpec with ratios [3,1]GridSpec unchangedGridSpec unchangedGridSpec unchanged
ax1NoneNoneAxesSubplot with width ratio 3AxesSubplot with width ratio 3AxesSubplot ready
ax2NoneNoneNoneAxesSubplot with width ratio 1AxesSubplot ready
Key Moments - 3 Insights
Why does the first subplot appear wider than the second?
Because the GridSpec was defined with width_ratios=[3,1], the first subplot gets 3 parts width and the second gets 1 part, making the first subplot three times wider (see execution_table step 2 and 3).
What happens if we change width_ratios to [1,3]?
The second subplot becomes wider than the first, reversing their sizes. This is controlled by the width_ratios parameter in GridSpec (see variable_tracker gs after step 2).
Can we have unequal heights instead of widths?
Yes, by using height_ratios in GridSpec for rows instead of width_ratios for columns, you can control vertical sizes similarly.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3. What is the width ratio of subplot ax1?
A1 unit
B3 units
CEqual width
DUndefined
💡 Hint
Check the 'Size/Ratio' column in execution_table row for step 3.
At which step is the second subplot (ax2) created?
AStep 4
BStep 3
CStep 2
DStep 5
💡 Hint
Look at the 'Action' column in execution_table for when ax2 is added.
If width_ratios were changed to [1, 3], how would the subplot sizes change?
ABoth subplots become equal size
BFirst subplot becomes larger, second smaller
CFirst subplot becomes smaller, second larger
DNo change in sizes
💡 Hint
Refer to key_moments explanation about width_ratios effect on subplot sizes.
Concept Snapshot
Use matplotlib.gridspec.GridSpec to create subplots with unequal sizes.
Define width_ratios or height_ratios to control relative sizes.
Add subplots using the GridSpec slices.
Plot data on each subplot.
Call plt.show() to display the figure with unequal subplot sizes.
Full Transcript
This visual execution shows how to create subplots with unequal sizes using matplotlib's GridSpec. First, a figure is created. Then, GridSpec defines a grid layout with specified width ratios, here [3,1], meaning the first subplot is three times wider than the second. Subplots are added according to this grid. Data is plotted on each subplot. Finally, the figure is displayed showing the unequal subplot sizes clearly. Variables like fig, gs, ax1, and ax2 change step-by-step as subplots are created and plotted. Key moments clarify why the first subplot is wider and how changing width_ratios affects sizes. The quiz tests understanding of these steps and ratios.

Practice

(1/5)
1. What is the main advantage of using unequal subplot sizes in matplotlib?
easy
A. To automatically adjust colors of the plots
B. To make all charts the same size for uniformity
C. To highlight important charts by giving them more space
D. To reduce the total number of charts displayed

Solution

  1. Step 1: Understand subplot size purpose

    Unequal subplot sizes allow some plots to be larger, drawing more attention.
  2. Step 2: Compare options

    Only To highlight important charts by giving them more space mentions highlighting important charts by size, which is the main advantage.
  3. Final Answer:

    To highlight important charts by giving them more space -> Option C
  4. Quick Check:

    Unequal sizes highlight key charts [OK]
Hint: Unequal sizes = emphasize important plots [OK]
Common Mistakes:
  • Thinking all subplots must be equal size
  • Confusing size with color or number of plots
  • Assuming unequal sizes reduce charts
2. Which of the following is the correct way to create subplots with unequal sizes using gridspec_kw in plt.subplots()?
easy
A. plt.subplots(1, 2, gridspec_kw={'width_ratios': [2, 1]})
B. plt.subplots(2, 1, gridspec_kw={'height_ratios': [1, 2]})
C. plt.subplots(1, 2, gridspec_kw={'height_ratios': [2, 1]})
D. plt.subplots(2, 1, gridspec_kw={'width_ratios': [1, 2]})

Solution

  1. Step 1: Identify correct parameter for horizontal subplots

    For 1 row and 2 columns, use 'width_ratios' to set horizontal size ratios.
  2. Step 2: Match ratios to subplot layout

    plt.subplots(1, 2, gridspec_kw={'width_ratios': [2, 1]}) uses 1 row, 2 columns with width_ratios, which is correct syntax.
  3. Final Answer:

    plt.subplots(1, 2, gridspec_kw={'width_ratios': [2, 1]}) -> Option A
  4. Quick Check:

    Width ratios for columns = plt.subplots(1, 2, gridspec_kw={'width_ratios': [2, 1]}) [OK]
Hint: Use width_ratios for columns, height_ratios for rows [OK]
Common Mistakes:
  • Mixing width_ratios with rows instead of columns
  • Using height_ratios for horizontal layout
  • Wrong number of rows and columns in function
3. What will be the width ratio of the two subplots created by this code?
fig, axs = plt.subplots(1, 2, gridspec_kw={'width_ratios': [3, 1]})
medium
A. Both subplots have equal width
B. The subplots have random widths
C. The second subplot is 3 times wider than the first
D. The first subplot is 3 times wider than the second

Solution

  1. Step 1: Understand width_ratios parameter

    The list [3, 1] means the first subplot width is 3 units, second is 1 unit.
  2. Step 2: Interpret ratio meaning

    This means the first subplot is 3 times wider than the second subplot.
  3. Final Answer:

    The first subplot is 3 times wider than the second -> Option D
  4. Quick Check:

    Width ratio 3:1 means first is 3x wider [OK]
Hint: Ratio list directly shows relative sizes [OK]
Common Mistakes:
  • Assuming equal widths despite ratios
  • Reversing which subplot is wider
  • Ignoring the ratio values
4. Identify the error in this code that tries to create unequal subplot sizes:
fig, axs = plt.subplots(2, 1, gridspec_kw={'width_ratios': [1, 2]})
medium
A. Incorrect number of subplots specified
B. Using width_ratios for vertical subplots instead of height_ratios
C. Missing plt.show() to display plots
D. width_ratios list length does not match subplot count

Solution

  1. Step 1: Check subplot layout

    2 rows and 1 column means vertical stacking of subplots.
  2. Step 2: Verify correct ratio parameter

    For vertical layout, use 'height_ratios', not 'width_ratios'.
  3. Final Answer:

    Using width_ratios for vertical subplots instead of height_ratios -> Option B
  4. Quick Check:

    Vertical layout needs height_ratios [OK]
Hint: Use height_ratios for rows, width_ratios for columns [OK]
Common Mistakes:
  • Confusing width_ratios and height_ratios
  • Ignoring subplot grid shape
  • Assuming plt.show() affects subplot sizes
5. You want to create a figure with 3 subplots in one row where the middle subplot is twice as wide as the others. Which code correctly achieves this?
hard
A. plt.subplots(1, 3, gridspec_kw={'width_ratios': [1, 2, 1]})
B. plt.subplots(3, 1, gridspec_kw={'height_ratios': [1, 2, 1]})
C. plt.subplots(1, 3, gridspec_kw={'height_ratios': [1, 2, 1]})
D. plt.subplots(3, 1, gridspec_kw={'width_ratios': [1, 2, 1]})

Solution

  1. Step 1: Determine subplot layout

    One row and three columns means horizontal layout.
  2. Step 2: Choose correct ratio parameter

    For horizontal layout, use 'width_ratios' to set widths.
  3. Step 3: Set ratios to make middle subplot twice as wide

    Use [1, 2, 1] so middle subplot is twice the width of others.
  4. Final Answer:

    plt.subplots(1, 3, gridspec_kw={'width_ratios': [1, 2, 1]}) -> Option A
  5. Quick Check:

    Horizontal layout with width_ratios = plt.subplots(1, 3, gridspec_kw={'width_ratios': [1, 2, 1]}) [OK]
Hint: Middle subplot twice wide = width_ratios [1, 2, 1] [OK]
Common Mistakes:
  • Using height_ratios for horizontal layout
  • Setting wrong number of rows and columns
  • Reversing ratio order
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