Bird
Raised Fist0
Matplotlibdata~10 mins

Shared axes between subplots in Matplotlib - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Shared axes between subplots
Create Figure
↓
Create Subplots with shared axes
↓
Plot data on each subplot
↓
Axes share limits and ticks
↓
Display combined plot
This flow shows creating a figure with multiple subplots that share x or y axes, so zooming or panning one affects the others.
Execution Sample
Matplotlib
import matplotlib.pyplot as plt
fig, axs = plt.subplots(2, 1, sharex=True)
axs[0].plot([1, 2, 3], [1, 4, 9])
axs[1].plot([1, 2, 3], [2, 3, 4])
plt.show()
Creates two vertical subplots sharing the x-axis and plots different data on each.
Execution Table
StepActionResultNotes
1Call plt.subplots(2,1, sharex=True)Figure with 2 subplots createdSubplots share x-axis limits and ticks
2Plot on axs[0]Line plotted on top subplotX-axis range set to [1,3], y-axis auto-scaled
3Plot on axs[1]Line plotted on bottom subplotX-axis shared with top subplot
4Display plot with plt.show()Window opens showing 2 plots stacked verticallyX-axis ticks aligned and zoom/pan synced
5User zooms x-axis on one subplotBoth subplots update x-axis rangeShared axis behavior confirmed
6User zooms y-axis on one subplotOnly that subplot y-axis changesY-axis not shared, independent scaling
7Execution endsPlot window remains open until closedEnd of script
💡 Plot window stays open until user closes it, script ends after plt.show()
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
figNoneFigure object createdSameSameSame
axsNoneArray of 2 Axes objectsaxs[0] has line plottedaxs[1] has line plottedSame
x-axis limitsNone[1,3][1,3][1,3][1,3] shared
y-axis limits axs[0]NoneAutoAuto scaled to [1,9]SameSame
y-axis limits axs[1]NoneAutoAutoAuto scaled to [2,4]Same
Key Moments - 2 Insights
Why do both subplots update their x-axis when I zoom one but not the y-axis?
Because sharex=True links the x-axes of both subplots, so zooming one updates both. The y-axes are independent since sharey was not set, so only the zoomed subplot's y-axis changes. See execution_table rows 5 and 6.
What happens if I set sharey=True instead of sharex=True?
Then the y-axes will be linked and zooming or panning vertically on one subplot updates both y-axes. The x-axes remain independent. This is the opposite of the current example where only x is shared.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the x-axis limit after plotting on both subplots?
A[1, 9]
B[0, 10]
C[1, 3]
DAuto-scaled independently
💡 Hint
Check the 'x-axis limits' row in variable_tracker after Step 3
At which step does the bottom subplot get its line plotted?
AStep 3
BStep 2
CStep 1
DStep 4
💡 Hint
Look at the 'Action' column in execution_table for plotting on axs[1]
If sharex=False, how would the x-axis behavior change when zooming one subplot?
ABoth subplots zoom together
BOnly the zoomed subplot's x-axis changes
CNeither subplot zooms
DBoth subplots zoom but y-axis stays fixed
💡 Hint
Recall that sharex=True links x-axes; without it, axes are independent
Concept Snapshot
Use plt.subplots(rows, cols, sharex=True/False, sharey=True/False) to create subplots that share axes.
Shared axes sync limits and ticks between subplots.
Zooming or panning one shared axis updates all linked subplots.
Unshared axes remain independent.
Common for comparing data with aligned scales.
Full Transcript
This lesson shows how to create multiple subplots in matplotlib that share axes. We start by creating a figure with two vertical subplots sharing the x-axis using plt.subplots(2,1,sharex=True). We plot different lines on each subplot. Because the x-axis is shared, zooming or panning the x-axis on one subplot updates the other automatically. The y-axes are independent, so zooming vertically affects only the subplot zoomed. The execution table traces each step: creating subplots, plotting lines, displaying the figure, and user interactions. The variable tracker shows how axes limits change. Key moments clarify why shared axes sync only the specified axis. The quiz tests understanding of axis limits, plotting steps, and behavior changes if sharing is disabled. This helps beginners see how shared axes work visually and practically.

Practice

(1/5)
1. What is the main benefit of using sharex or sharey when creating subplots in matplotlib?
easy
A. It changes the color of the axes to match across subplots.
B. It makes the x or y axes use the same scale across subplots for easier comparison.
C. It automatically adds titles to each subplot.
D. It increases the size of the figure window.

Solution

  1. Step 1: Understand the purpose of shared axes

    Shared axes mean multiple plots use the same scale on x or y axis, making it easier to compare data visually.
  2. Step 2: Identify what sharex and sharey do

    These parameters in plt.subplots() link the axes scales so they stay consistent across subplots.
  3. Final Answer:

    It makes the x or y axes use the same scale across subplots for easier comparison. -> Option B
  4. Quick Check:

    Shared axes = same scale for easy comparison [OK]
Hint: Shared axes keep scales same for easy visual comparison [OK]
Common Mistakes:
  • Thinking shared axes change colors
  • Assuming shared axes add titles automatically
  • Believing shared axes affect figure size
2. Which of the following is the correct way to create two subplots sharing the y-axis using matplotlib?
easy
A. plt.subplots(1, 2, sharex=false)
B. plt.subplots(2, 1, sharex=true)
C. plt.subplots(1, 2, sharey=false)
D. plt.subplots(2, 1, sharey=true)

Solution

  1. Step 1: Identify the parameter for sharing y-axis

    The parameter sharey=true shares the y-axis between subplots.
  2. Step 2: Check the subplot layout

    2, 1 means 2 rows and 1 column, which is valid for vertical stacking with shared y-axis.
  3. Final Answer:

    plt.subplots(2, 1, sharey=true) -> Option D
  4. Quick Check:

    sharey=true shares y-axis [OK]
Hint: Use sharey=true for vertical subplots sharing y-axis [OK]
Common Mistakes:
  • Using sharex instead of sharey
  • Mixing rows and columns incorrectly
  • Setting sharey=false when sharing is needed
3. What will be the output of the following code snippet?
import matplotlib.pyplot as plt
fig, axs = plt.subplots(1, 2, sharex=True)
axs[0].plot([1, 2, 3], [10, 20, 30])
axs[1].plot([1, 2, 3], [15, 25, 35])
print(axs[1].get_xlim())
medium
A. (0.9, 3.1)
B. (10.0, 35.0)
C. (1.0, 3.0)
D. (15.0, 35.0)

Solution

  1. Step 1: Understand sharex=true effect

    With sharex=True, both subplots share the same x-axis limits.
  2. Step 2: Check data x-values and default limits

    The x data is [1, 2, 3]. Matplotlib adds a small margin, so limits are slightly beyond 1 and 3, e.g., (0.9, 3.1).
  3. Final Answer:

    (0.9, 3.1) -> Option A
  4. Quick Check:

    Shared x-axis limits include margin around data [OK]
Hint: Shared axes use same limits with small margin [OK]
Common Mistakes:
  • Confusing x and y limits
  • Expecting exact data min/max as limits
  • Ignoring margin matplotlib adds
4. Consider this code:
fig, axs = plt.subplots(2, 2, sharex=True, sharey=True)
axs[0, 0].plot([1, 2], [3, 4])
axs[1, 1].plot([1, 2], [5, 6])
axs[1, 0].set_xlim(0, 3)
print(axs[0, 1].get_xlim())

What is the likely output and why might it cause confusion?
medium
A. Error because set_xlim cannot be used with shared axes.
B. (1.0, 2.0) because each subplot keeps its own limits despite sharing.
C. (0.0, 3.0) because all x-axes are shared and limits set on one affect all.
D. (3.0, 0.0) because limits are reversed causing an error.

Solution

  1. Step 1: Understand sharex and sharey effect on limits

    Sharing axes means setting limits on one subplot updates all linked subplots.
  2. Step 2: Analyze set_xlim call and its effect

    Setting set_xlim(0, 3) on axs[1, 0] changes x-axis limits for all subplots sharing x-axis.
  3. Final Answer:

    (0.0, 3.0) because all x-axes are shared and limits set on one affect all. -> Option C
  4. Quick Check:

    Shared axes share limits changes [OK]
Hint: Changing limits on one shared axis updates all linked subplots [OK]
Common Mistakes:
  • Thinking each subplot keeps independent limits
  • Expecting error from set_xlim with shared axes
  • Confusing reversed limits as error
5. You want to create a 2x2 grid of subplots where the top row shares the x-axis, the left column shares the y-axis, but the bottom row and right column do not share axes. Which code snippet correctly achieves this?
hard
A. Use plt.subplots(2, 2, sharex='row', sharey='col') to share x in rows and y in columns.
B. Create subplots with sharex='col' and sharey='row' then manually adjust axes sharing.
C. Use plt.subplots(2, 2, sharex='col', sharey='row') to share x in columns and y in rows.
D. Create subplots without sharing and link axes manually with ax.sharex() and ax.sharey().

Solution

  1. Step 1: Understand sharex and sharey options

    In plt.subplots(), sharex='col' shares x-axis within each column, and sharey='row' shares y-axis within each row.
  2. Step 2: Match requirement to parameters

    We want top row to share x-axis (same x in row), so sharex='row' is needed. Left column shares y-axis (same y in column), so sharey='col' is needed.
  3. Step 3: Identify correct code

    Use plt.subplots(2, 2, sharex='col', sharey='row') to share x in columns and y in rows. uses sharex='col' and sharey='row', which is reversed. Use plt.subplots(2, 2, sharex='row', sharey='col') to share x in rows and y in columns. uses sharex='row' and sharey='col', which matches the requirement.
  4. Final Answer:

    Use plt.subplots(2, 2, sharex='row', sharey='col') to share x in rows and y in columns. -> Option A
  5. Quick Check:

    sharex='row' and sharey='col' matches sharing needs [OK]
Hint: sharex='row' shares x in rows; sharey='col' shares y in columns [OK]
Common Mistakes:
  • Confusing 'row' and 'col' values for sharex/sharey
  • Assuming sharex='col' shares x in rows
  • Trying to manually link axes unnecessarily
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