Bird
Raised Fist0
Matplotlibdata~5 mins

Broken axes concept in Matplotlib

Choose your learning style10 modes available
Introduction

Sometimes data has gaps or large jumps that make it hard to see details on a plot. Broken axes let you skip these gaps to focus on important parts.

You want to show two separate ranges of data on the same plot without the empty space in between.
Your data has a big jump or gap that hides smaller details.
You want to compare two different value ranges clearly in one figure.
You want to save space by not showing unimportant empty parts of the axis.
Syntax
Matplotlib
import matplotlib.pyplot as plt
from matplotlib import gridspec

fig = plt.figure()
gs = gridspec.GridSpec(2, 1, height_ratios=[1, 1], hspace=0.05)

ax1 = fig.add_subplot(gs[0])  # Top plot
ax2 = fig.add_subplot(gs[1], sharex=ax1)  # Bottom plot

# Hide x-axis labels on top plot
plt.setp(ax1.get_xticklabels(), visible=False)

# Plot data on ax1 and ax2

# Add diagonal lines to show break
kwargs = dict(transform=ax1.transAxes, color='k', clip_on=False)
ax1.plot((-0.015, +0.015), (-0.02, +0.02), **kwargs)
ax1.plot((1 - 0.015, 1 + 0.015), (-0.02, +0.02), **kwargs)

kwargs.update(transform=ax2.transAxes)
ax2.plot((-0.015, +0.015), (1 - 0.02, 1 + 0.02), **kwargs)
ax2.plot((1 - 0.015, 1 + 0.015), (1 - 0.02, 1 + 0.02), **kwargs)

plt.show()

This example uses gridspec to create two stacked plots sharing the x-axis.

Diagonal lines show the axis break visually.

Examples
This example shows two plots stacked vertically with a break in the y-axis to skip the gap between 40 and 100.
Matplotlib
import matplotlib.pyplot as plt
from matplotlib import gridspec

fig = plt.figure()
gs = gridspec.GridSpec(2, 1, height_ratios=[1, 1], hspace=0.05)

ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1], sharex=ax1)

ax1.plot([0, 1, 2, 3, 4], [0, 10, 20, 30, 40])
ax2.plot([0, 1, 2, 3, 4], [100, 110, 120, 130, 140])

plt.setp(ax1.get_xticklabels(), visible=False)

kwargs = dict(transform=ax1.transAxes, color='k', clip_on=False)
ax1.plot((-0.015, +0.015), (-0.02, +0.02), **kwargs)
ax1.plot((1 - 0.015, 1 + 0.015), (-0.02, +0.02), **kwargs)

kwargs.update(transform=ax2.transAxes)
ax2.plot((-0.015, +0.015), (1 - 0.02, 1 + 0.02), **kwargs)
ax2.plot((1 - 0.015, 1 + 0.015), (1 - 0.02, 1 + 0.02), **kwargs)

plt.show()
This example uses different height ratios to give more space to the top plot, useful when one range is more important.
Matplotlib
import matplotlib.pyplot as plt
from matplotlib import gridspec

fig = plt.figure(figsize=(6, 4))
gs = gridspec.GridSpec(2, 1, height_ratios=[2, 1], hspace=0.1)

ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1], sharex=ax1)

x = [1, 2, 3, 4, 5]
y1 = [10, 15, 20, 25, 30]
y2 = [100, 110, 120, 130, 140]

ax1.plot(x, y2, 'r-')
ax2.plot(x, y1, 'b-')

plt.setp(ax1.get_xticklabels(), visible=False)

kwargs = dict(transform=ax1.transAxes, color='k', clip_on=False)
ax1.plot((-0.01, +0.01), (-0.02, +0.02), **kwargs)
ax1.plot((1 - 0.01, 1 + 0.01), (-0.02, +0.02), **kwargs)

kwargs.update(transform=ax2.transAxes)
ax2.plot((-0.01, +0.01), (1 - 0.02, 1 + 0.02), **kwargs)
ax2.plot((1 - 0.01, 1 + 0.01), (1 - 0.02, 1 + 0.02), **kwargs)

plt.show()
Sample Program

This program creates a plot with two y-axis ranges separated by a break. It shows data points from 0 to 40 on the bottom plot and 100 to 140 on the top plot. The diagonal lines show where the axis is broken.

Matplotlib
import matplotlib.pyplot as plt
from matplotlib import gridspec

# Create figure and gridspec with two rows
fig = plt.figure(figsize=(6, 5))
gs = gridspec.GridSpec(2, 1, height_ratios=[1, 1], hspace=0.05)

# Create two subplots sharing x-axis
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1], sharex=ax1)

# Data with a big gap between 40 and 100
x = [0, 1, 2, 3, 4]
y_top = [100, 110, 120, 130, 140]
y_bottom = [0, 10, 20, 30, 40]

# Plot top data on ax1
ax1.plot(x, y_top, marker='o', color='red')
ax1.set_ylim(90, 150)  # Limit y-axis to top range

# Plot bottom data on ax2
ax2.plot(x, y_bottom, marker='o', color='blue')
ax2.set_ylim(-5, 45)  # Limit y-axis to bottom range

# Hide x tick labels on top plot
plt.setp(ax1.get_xticklabels(), visible=False)

# Add diagonal lines to indicate broken axis
kwargs = dict(transform=ax1.transAxes, color='k', clip_on=False)
ax1.plot((-0.015, +0.015), (-0.02, +0.02), **kwargs)  # left diagonal
ax1.plot((1 - 0.015, 1 + 0.015), (-0.02, +0.02), **kwargs)  # right diagonal

kwargs.update(transform=ax2.transAxes)
ax2.plot((-0.015, +0.015), (1 - 0.02, 1 + 0.02), **kwargs)  # left diagonal
ax2.plot((1 - 0.015, 1 + 0.015), (1 - 0.02, 1 + 0.02), **kwargs)  # right diagonal

plt.xlabel('X axis')
ax2.set_ylabel('Value')
ax1.set_ylabel('Value')
plt.suptitle('Example of Broken Axes to Skip Gap in Data')

plt.show()
OutputSuccess
Important Notes

Broken axes help focus on important data ranges by skipping large gaps.

Make sure to add visual cues like diagonal lines so viewers understand the axis is broken.

Sharing the x-axis keeps the plot aligned and easier to read.

Summary

Broken axes let you show separate data ranges in one figure by skipping gaps.

Use stacked subplots with shared axes and add diagonal lines to indicate breaks.

This technique helps reveal details hidden by large jumps in data.

Practice

(1/5)
1. What is the main purpose of using broken axes in matplotlib plots?
easy
A. To skip unimportant data ranges and focus on key parts
B. To add 3D effects to the plot
C. To change the color scheme automatically
D. To animate the plot over time

Solution

  1. Step 1: Understand the concept of broken axes

    Broken axes are used to skip over parts of the axis where data is not important or has large gaps.
  2. Step 2: Identify the main purpose

    This helps to focus on important data ranges without showing the entire axis continuously.
  3. Final Answer:

    To skip unimportant data ranges and focus on key parts -> Option A
  4. Quick Check:

    Broken axes = skip gaps [OK]
Hint: Broken axes hide gaps to highlight important data [OK]
Common Mistakes:
  • Thinking broken axes add 3D or animation
  • Confusing broken axes with color changes
  • Assuming broken axes zoom in automatically
2. Which of the following is the correct way to import the brokenaxes package to use brokenaxes(...) directly for creating broken axes plots?
easy
A. from brokenaxes import BrokenAxes
B. import brokenaxes as ba
C. from brokenaxes import brokenaxes
D. import matplotlib.brokenaxes as ba

Solution

  1. Step 1: Recall the correct import syntax

    The brokenaxes package provides the brokenaxes function to create broken axes plots.
  2. Step 2: Identify the correct import statement

    The correct way is from brokenaxes import brokenaxes to access the function directly.
  3. Final Answer:

    from brokenaxes import brokenaxes -> Option C
  4. Quick Check:

    Import brokenaxes function = from brokenaxes import brokenaxes [OK]
Hint: Import brokenaxes function directly from brokenaxes [OK]
Common Mistakes:
  • Using capital 'BrokenAxes' instead of 'brokenaxes'
  • Trying to import from matplotlib instead of brokenaxes
  • Using wrong import syntax causing ImportError
3. What will the following code output?
from brokenaxes import brokenaxes
import matplotlib.pyplot as plt

bax = brokenaxes(ylims=((0, 2), (8, 10)))
bax.plot([0, 1, 2, 3], [1, 1.5, 9, 9.5])
plt.show()
medium
A. A plot with y-axis broken between 2 and 8 showing points near 1 and 9
B. A plot with continuous y-axis from 0 to 10
C. An error because ylims must be a single tuple
D. A plot with x-axis broken between 2 and 8

Solution

  1. Step 1: Analyze the ylims parameter

    The ylims=((0, 2), (8, 10)) means the y-axis is broken to show two ranges: 0 to 2 and 8 to 10, skipping 2 to 8.
  2. Step 2: Understand the plotted points

    The y-values are 1, 1.5, 9, and 9.5, which fit into the two visible y-axis ranges.
  3. Final Answer:

    A plot with y-axis broken between 2 and 8 showing points near 1 and 9 -> Option A
  4. Quick Check:

    ylims tuple of ranges = broken y-axis [OK]
Hint: ylims with tuples creates breaks on y-axis [OK]
Common Mistakes:
  • Assuming y-axis is continuous without breaks
  • Confusing x-axis and y-axis breaks
  • Expecting an error from tuple ylims
4. Identify the error in this code snippet that tries to create broken axes:
from brokenaxes import brokenaxes
import matplotlib.pyplot as plt

bax = brokenaxes(xlims=(0, 2), (5, 7))
bax.plot([1, 6], [10, 20])
plt.show()
medium
A. plt.show() must be called before plot
B. plot function requires x and y to be the same length
C. BrokenAxes cannot be used with xlims parameter
D. xlims should be a tuple of tuples, not separate tuples

Solution

  1. Step 1: Check the xlims argument syntax

    The code uses xlims=(0, 2), (5, 7) which is invalid syntax; it should be a single tuple containing tuples like xlims=((0, 2), (5, 7)).
  2. Step 2: Confirm other parts are correct

    The plot call and plt.show() are correct; the error is only in xlims syntax.
  3. Final Answer:

    xlims should be a tuple of tuples, not separate tuples -> Option D
  4. Quick Check:

    xlims syntax = tuple of tuples [OK]
Hint: Use double parentheses for xlims tuple of ranges [OK]
Common Mistakes:
  • Passing multiple tuples without enclosing in one tuple
  • Mixing up xlims and ylims syntax
  • Calling plt.show() too early
5. You have data with y-values clustered around 0-3 and 50-55, with a large gap in between. How would you create a broken y-axis to show both clusters clearly using brokenaxes?
hard
A. Plot two separate figures for each cluster
B. Use ylims=((0, 3), (50, 55)) when creating brokenaxes
C. Use xlims=((0, 3), (50, 55)) to break x-axis instead
D. Use ylims=(0, 55) to show full range without breaks

Solution

  1. Step 1: Identify the axis to break

    The gap is in y-values, so the y-axis needs to be broken to skip the large gap between 3 and 50.
  2. Step 2: Set ylims with two ranges

    Using ylims=((0, 3), (50, 55)) creates a broken y-axis showing both clusters clearly.
  3. Final Answer:

    Use ylims=((0, 3), (50, 55)) when creating brokenaxes -> Option B
  4. Quick Check:

    Broken y-axis = ylims tuple of ranges [OK]
Hint: Set ylims with two ranges to break y-axis gaps [OK]
Common Mistakes:
  • Breaking x-axis instead of y-axis
  • Using single continuous ylims hiding gap
  • Plotting separate figures 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