Anpassen von Textpfaden mit Matplotlib

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

Das Matplotlib TextPath-Modul ermöglicht die Erstellung eines Pfads, der die Zeichen eines Textes umrandet. Der resultierende Pfad kann für verschiedene Zwecke verwendet werden, beispielsweise als Clipping-Pfad für ein Bild. In diesem Lab lernen Sie, wie Sie das TextPath-Modul verwenden, um Textpfade für Bilder zu erstellen und anzupassen.

Tipps für die virtuelle Maschine (VM)

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

Manchmal müssen Sie möglicherweise einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Aufgrund von Einschränkungen in Jupyter Notebook kann die Validierung von Vorgängen nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie sich gerne an Labby wenden. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem umgehend für Sie beheben.

Matplotlib installieren

Bevor Sie beginnen, müssen Sie Matplotlib in Ihrer Umgebung installiert haben. Sie können es über pip installieren, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:

pip install matplotlib

Importieren der erforderlichen Bibliotheken

Zunächst müssen Sie die erforderlichen Bibliotheken importieren, um den TextPath zu erstellen.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cbook import get_sample_data
from matplotlib.image import BboxImage
from matplotlib.offsetbox import (AnchoredOffsetbox, AnnotationBbox, AuxTransformBox)
from matplotlib.patches import PathPatch, Shadow
from matplotlib.text import TextPath
from matplotlib.transforms import IdentityTransform

Erstellen eines PathClippedImagePatch

Erstellen Sie ein PathClippedImagePatch-Objekt, um ein Bild eines Textpfads zu zeichnen. Verwenden Sie den folgenden Code, um ein PathClippedImagePatch-Objekt zu erstellen:

class PathClippedImagePatch(PathPatch):
    def __init__(self, path, bbox_image, **kwargs):
        super().__init__(path, **kwargs)
        self.bbox_image = BboxImage(
            self.get_window_extent, norm=None, origin=None)
        self.bbox_image.set_data(bbox_image)

    def set_facecolor(self, color):
        super().set_facecolor("none")

    def draw(self, renderer=None):
        self.bbox_image.set_clip_path(self._path, self.get_transform())
        self.bbox_image.draw(renderer)
        super().draw(renderer)

Erstellen einer Offset-Box

Erstellen Sie eine Offset-Box mit AuxTransformBox, um das PathClippedImagePatch-Objekt hinzuzufügen. Verwenden Sie den folgenden Code, um die Offset-Box zu erstellen:

offsetbox = AuxTransformBox(IdentityTransform())
offsetbox.add_artist(p)

Erstellen einer verankerten Offset-Box

Erstellen Sie eine verankerte Offset-Box mit AnnotationBbox, um die Offset-Box hinzuzufügen und ihre Position festzulegen. Verwenden Sie den folgenden Code, um die verankerte Offset-Box zu erstellen:

ao = AnchoredOffsetbox(loc='upper left', child=offsetbox, frameon=True,
                           borderpad=0.2)
ax1.add_artist(ao)

Hinzufügen eines weiteren Texts

Fügen Sie mithilfe von PathPatch einen weiteren Text zum Bild hinzu. Verwenden Sie den folgenden Code, um einen weiteren Text hinzuzufügen:

for usetex, ypos, string in [
            (False, 0.25, r"textpath supports mathtext"),
            (True, 0.05, r"textpath supports \TeX"),
    ]:
        text_path = TextPath((0, 0), string, size=20, usetex=usetex)

        p1 = PathPatch(text_path, ec="w", lw=3, fc="w", alpha=0.9)
        p2 = PathPatch(text_path, ec="none", fc="k")

        offsetbox2 = AuxTransformBox(IdentityTransform())
        offsetbox2.add_artist(p1)
        offsetbox2.add_artist(p2)

        ab = AnnotationBbox(offsetbox2, (0.95, ypos),
                            xycoords='axes fraction',
                            boxcoords="offset points",
                            box_alignment=(1., 0.),
                            frameon=False,
                            )
        ax1.add_artist(ab)

Anzeigen des Bildes

Zeigen Sie das endgültige Bild mit dem folgenden Code an:

ax1.imshow([[0, 1, 2], [1, 2, 3]], cmap=plt.cm.gist_gray_r,
               interpolation="bilinear", aspect="auto")
plt.show()

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie das Matplotlib TextPath-Modul verwenden können, um Textpfade (text paths) für Bilder zu erstellen und anzupassen. Indem Sie die in diesem Lab beschriebenen Schritte befolgen, können Sie Bilder mit benutzerdefinierten Textpfaden erstellen, die für verschiedene Zwecke nützlich sind.