Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mencipta Paksi Tidak Berterusan dalam Matplotlib?

Bagaimana untuk Mencipta Paksi Tidak Berterusan dalam Matplotlib?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 16:33:12978semak imbas

How to Create Discontinuous Axes in Matplotlib?

Mencipta Paksi Tak Berterusan dalam Matplotlib

Pengenalan:

Apabila mencipta plot menggunakan Matplotlib, a paksi-x berterusan biasanya digunakan. Walau bagaimanapun, mungkin terdapat keadaan di mana paksi tak selanjar dikehendaki, di mana jurang atau lompatan berlaku dalam nilai paksi-x. Ini boleh berguna untuk memaparkan data dengan nilai yang tiada atau diedarkan jarang.

Menggunakan Subplot:

Satu pendekatan untuk mencipta paksi tak selanjar ialah menggunakan subplot. Setiap subplot boleh diberikan julat nilai paksi-x yang berbeza, mengakibatkan jurang antara subplot. Berikut ialah contoh mudah:

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()

Transformasi Paksi Tersuai:

Kaedah lain untuk mencipta paksi tak selanjar ialah menggunakan transformasi paksi tersuai. Dengan mentakrifkan kelas transformasi baharu, kita boleh menentukan cara data dipetakan ke paksi. Kod berikut menunjukkan pendekatan ini:

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()

Kesimpulan:

Mencipta paksi tak selanjar dalam Matplotlib boleh dicapai menggunakan subplot atau transformasi paksi tersuai. Pendekatan transformasi tersuai memberikan lebih fleksibiliti dan kawalan ke atas tingkah laku paksi. Kedua-dua kaedah boleh berkesan untuk menggambarkan data dengan jurang atau ketakselanjaran.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Paksi Tidak Berterusan dalam Matplotlib?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn