Home > Backend Development > Python Tutorial > How to Create Discontinuous Axes in Matplotlib?

How to Create Discontinuous Axes in Matplotlib?

Mary-Kate Olsen
Release: 2024-12-01 16:33:12
Original
977 people have browsed it

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()
Copy after login

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()
Copy after login

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.

The above is the detailed content of How to Create Discontinuous Axes in Matplotlib?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template