Achsen-Zoom-Effekt

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial lernen Sie, wie Sie mit matplotlib einen Zoom-Effekt erstellen. Der Zoom-Effekt ermöglicht es Ihnen, zwischen zwei verschiedenen Achsen zu navigieren und einzuzoomen.

Tipps für virtuelle Maschinen (VM)

Nachdem die VM gestartet ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby um Hilfe bitten. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Importieren der erforderlichen Bibliotheken

In diesem Schritt importieren wir die erforderlichen Bibliotheken für dieses Tutorial. Wir importieren matplotlib und die relevanten Bibliotheken aus mpl_toolkits.axes_grid1.

import matplotlib.pyplot as plt

from matplotlib.transforms import (Bbox, TransformedBbox,
                                   blended_transform_factory)
from mpl_toolkits.axes_grid1.inset_locator import (BboxConnector,
                                                   BboxConnectorPatch,
                                                   BboxPatch)

Definieren der Verbindung zwischen den Achsen

In diesem Schritt definieren wir die Verbindung zwischen den beiden Achsen. Diese Funktion nimmt zwei Achsen als Eingaben sowie die minimalen und maximalen Werte für die x-Achse entgegen. Anschließend erstellt sie eine Begrenzungsbox und verbindet die beiden Achsen.

def zoom_effect01(ax1, ax2, xmin, xmax, **kwargs):
    bbox = Bbox.from_extents(xmin, 0, xmax, 1)

    mybbox1 = TransformedBbox(bbox, ax1.get_xaxis_transform())
    mybbox2 = TransformedBbox(bbox, ax2.get_xaxis_transform())

    prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}

    c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
        mybbox1, mybbox2,
        loc1a=3, loc2a=2, loc1b=4, loc2b=1,
        prop_lines=kwargs, prop_patches=prop_patches)

    ax1.add_patch(bbox_patch1)
    ax2.add_patch(bbox_patch2)
    ax2.add_patch(c1)
    ax2.add_patch(c2)
    ax2.add_patch(p)

    return c1, c2, bbox_patch1, bbox_patch2, p

Erstellen der zweiten vergrößerten Achse

In diesem Schritt erstellen wir die zweite vergrößerte Achse. Diese Funktion nimmt zwei Achsen als Eingaben entgegen. Anschließend erstellt sie eine Begrenzungsbox für die zweite Achse und verbindet sie mit der ersten Achse.

def zoom_effect02(ax1, ax2, **kwargs):
    tt = ax1.transScale + (ax1.transLimits + ax2.transAxes)
    trans = blended_transform_factory(ax2.transData, tt)

    mybbox1 = ax1.bbox
    mybbox2 = TransformedBbox(ax1.viewLim, trans)

    prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}

    c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
        mybbox1, mybbox2,
        loc1a=3, loc2a=2, loc1b=4, loc2b=1,
        prop_lines=kwargs, prop_patches=prop_patches)

    ax1.add_patch(bbox_patch1)
    ax2.add_patch(bbox_patch2)
    ax2.add_patch(c1)
    ax2.add_patch(c2)
    ax2.add_patch(p)

    return c1, c2, bbox_patch1, bbox_patch2, p

Verbinden der Achsen

In diesem Schritt verbinden wir die Achsen und erstellen den Zoom-Effekt. Wir erstellen eine Figur mit vier Achsen und verbinden sie mit den Funktionen zoom_effect01 und zoom_effect02.

axs = plt.figure().subplot_mosaic([
    ["zoom1", "zoom2"],
    ["main", "main"],
])

axs["main"].set(xlim=(0, 5))
zoom_effect01(axs["zoom1"], axs["main"], 0.2, 0.8)
axs["zoom2"].set(xlim=(2, 3))
zoom_effect02(axs["zoom2"], axs["main"])

plt.show()

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie man einen Zoom-Effekt mit matplotlib erstellt. Wir haben zunächst eine Funktion definiert, um die Achsen zu verbinden, und dann eine zweite Funktion erstellt, um die zweite vergrößerte Achse zu erstellen. Schließlich haben wir die Achsen verbunden und den Zoom-Effekt erzeugt.