"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How to Create Discontinuous Axes in Matplotlib?

How to Create Discontinuous Axes in Matplotlib?

Published on 2024-11-26
Browse:263

How to Create Discontinuous Axes in Matplotlib?

Creating Discontinuous Axes in Matplotlib

Introduction:

When creating plots using Matplotlib, a continuous x-axis is typically used. However, there may be instances where a discontinuous axis is desired, where a gap or jump occurs in the x-axis values. This can be useful for displaying data with missing or sparsely distributed values.

Using Subplots:

One approach to creating a discontinuous axis is to use subplots. Each subplot can be assigned a different range of x-axis values, resulting in a gap between the subplots. Here's a simple example:

import matplotlib.pyplot as plt

x1 = np.linspace(0, 5, 100)
y1 = np.sin(x1)

x2 = np.linspace(10, 15, 100)
y2 = np.cos(x2)

plt.subplot(1, 2, 1)
plt.plot(x1, y1)

plt.subplot(1, 2, 2)
plt.plot(x2, y2)

plt.show()

Custom Axis Transformation:

Another method for creating a discontinuous axis is to use a custom axis transformation. By defining a new transformation class, we can specify how the data is mapped to the axis. The following code demonstrates this approach:

import matplotlib.pyplot as plt
from matplotlib.transforms import Transform
from matplotlib.ticker import LogLocator

class DiscontinuousTransform(Transform):
    def __init__(self, breaks):
        Transform.__init__(self)
        self.breaks = breaks

    def transform(self, values):
        new_values = values.copy()
        for break in self.breaks:
            new_values[values > break]  = 1
        return new_values

    def inverted(self):
        return InvertedDiscontinuousTransform(self.breaks)

class InvertedDiscontinuousTransform(Transform):
    def __init__(self, breaks):
        Transform.__init__(self)
        self.breaks = breaks

    def transform(self, values):
        new_values = values.copy()
        for break in self.breaks:
            new_values[values >= break] -= 1
        return new_values

    def inverted(self):
        return DiscontinuousTransform(self.breaks)

x = np.linspace(0, 10, 100)
y = np.sin(x)

trans = DiscontinuousTransform([5])
locator = LogLocator(base=10)
locator.set_params(minor_locator=None)

plt.plot(x, y, transform=trans)

plt.gca().xaxis.set_major_locator(locator)
plt.gca().xaxis.set_major_formatter(plt.FormatStrFormatter("%0.0f\n(pert)"))

plt.show()

Conclusion:

Creating a discontinuous axis in Matplotlib can be achieved using subplots or custom axis transformations. The custom transformation approach provides more flexibility and control over the axis behavior. Both methods can be effective for visualizing data with gaps or discontinuities.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3