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.
Broken axes concept in 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.
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()
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()
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.
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()
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.
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.