
Security News
OWASP 2025 Top 10 Adds Software Supply Chain Failures, Ranked Top Community Concern
OWASP’s 2025 Top 10 introduces Software Supply Chain Failures as a new category, reflecting rising concern over dependency and build system risks.
brokenaxes
Advanced tools

brokenaxes makes matplotlib plots with breaks in the axes for showing data across a discontinuous range.
matplotlib.GridSpec.subplot_spec.datetime.datetime objectsI recommend the Anaconda python distribution and this package is available via pypi:
pip install brokenaxes
import matplotlib.pyplot as plt
from brokenaxes import brokenaxes
import numpy as np
fig = plt.figure(figsize=(5, 2))
bax = brokenaxes(xlims=((0, .1), (.4, .7)), ylims=((-1, .7), (.79, 1)), hspace=.05)
x = np.linspace(0, 1, 100)
bax.plot(x, np.sin(10 * x), label='sin')
bax.plot(x, np.cos(10 * x), label='cos')
bax.legend(loc=3)
bax.set_xlabel('time')
bax.set_ylabel('value')

from brokenaxes import brokenaxes
from matplotlib.gridspec import GridSpec
import numpy as np
sps1, sps2 = GridSpec(2,1)
bax = brokenaxes(xlims=((.1, .3), (.7, .8)), subplot_spec=sps1)
x = np.linspace(0, 1, 100)
bax.plot(x, np.sin(x*30), ls=':', color='m')
x = np.random.poisson(3, 1000)
bax = brokenaxes(xlims=((0, 2.5), (3, 6)), subplot_spec=sps2)
bax.hist(x, histtype='bar')

import matplotlib.pyplot as plt
from brokenaxes import brokenaxes
import numpy as np
fig = plt.figure(figsize=(5, 5))
bax = brokenaxes(
xlims=((1, 500), (600, 10000)),
ylims=((1, 500), (600, 10000)),
hspace=.15,
xscale='log',
yscale='log',
)
x = np.logspace(0.0, 4, 100)
bax.loglog(x, x, label='$y=x=10^{0}$ to $10^{4}$')
bax.legend(loc='best')
bax.grid(axis='both', which='major', ls='-')
bax.grid(axis='both', which='minor', ls='--', alpha=0.4)
bax.set_xlabel('x')
bax.set_ylabel('y')
plt.show()

import matplotlib.pyplot as plt
from brokenaxes import brokenaxes
import numpy as np
import datetime
fig = plt.figure(figsize=(5, 5))
xx = [datetime.datetime(2020, 1, x) for x in range(1, 20)]
yy = np.arange(1, 20)
bax = brokenaxes(
xlims=(
(
datetime.datetime(2020, 1, 1),
datetime.datetime(2020, 1, 3),
),
(
datetime.datetime(2020, 1, 6),
datetime.datetime(2020, 1, 20),
)
)
)
bax.plot(xx, yy)
fig.autofmt_xdate()
[x.remove() for x in bax.diag_handles]
bax.draw_diags()
import matplotlib.dates as mdates
for ax in bax.axs:
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%b-%d'))

import matplotlib.pyplot as plt
from brokenaxes import brokenaxes
fig = plt.figure(figsize=(5, 5))
bax = brokenaxes(
xlims=((0, 0.1), (0.4, 0.7)), ylims=((-1, 0.7), (0.79, 1))
)
bax.text(0.5, 0.5, "hello")
You can customize brokenaxes outside of the supported features listed above. Brokenaxes works by creating a number of smaller axes objects, with the positions and sizes of those axes dictated by the data ranges used in the constructor. Those individual axes are stored as a list in bax.axs. Most customizations will require accessing those inner axes objects. (See the last two lines of the datetime example). There is also a larger invisible axes object, bax.big_ax, which spans the entire brokenaxes region and is used for things like x and y axis labels which span all of the smaller axes.
If you make a plot with this tool that you are proud of, send me a png and code and I'll add it to the gallery!
Please use this tool wisely. Any data visualization techique can be used to elucidate trends in the data, but can also be used to manipulate and mislead. The latter is particularly true for broken axes plots, so please try to use them responsibly. Other than that, this software is free to use. See the license file for details.
brokenaxes uses pytest-mpl to ensure that the plots are created correctly.
To test that the plots are created correctly, run pytest --mpl --mpl-baseline-path test_baseline test.py from the root directory.
To generate new test plots, run pytest --mpl-generate-path test_baseline test.py from the root directory.
If you are running the tests on a headless server, you may need to set the MPLBACKEND environment variable to Agg.
FAQs
Create broken axes
We found that brokenaxes demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
OWASP’s 2025 Top 10 introduces Software Supply Chain Failures as a new category, reflecting rising concern over dependency and build system risks.

Research
/Security News
Socket researchers discovered nine malicious NuGet packages that use time-delayed payloads to crash applications and corrupt industrial control systems.

Security News
Socket CTO Ahmad Nassri discusses why supply chain attacks now target developer machines and what AI means for the future of enterprise security.