Erstellen von Donuts mit path.Path und patches.PathPatch

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 erstellen wir einen Donut mit Matplotlibs ~.path.Path und ~.patches.PathPatch. Wir verwenden die make_circle()-Funktion, um den Kreis zu erstellen, und verbinden die inneren und äußeren Teilpfade, um den Donut zu erstellen.

Tipps für die VM

Nachdem der VM-Start abgeschlossen 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 von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Importieren der erforderlichen Bibliotheken

Wir beginnen mit dem Importieren der erforderlichen Bibliotheken für dieses Tutorial.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.path as mpath

Definition einer Hilfsfunktion

Wir definieren eine Hilfsfunktion wise(), um die Orientierung des Pfads zu bestimmen.

def wise(v):
    if v == 1:
        return "CCW"
    else:
        return "CW"

Erstellen des Kreises

Wir werden den Kreis mit der make_circle()-Funktion erstellen. Die Funktion nimmt den Radius des Kreises als Eingabe und gibt die x- und y-Koordinaten des Kreises zurück.

def make_circle(r):
    t = np.arange(0, np.pi * 2.0, 0.01)
    t = t.reshape((len(t), 1))
    x = r * np.cos(t)
    y = r * np.sin(t)
    return np.hstack((x, y))

Erstellen des Donuts

Wir werden den Donut erstellen, indem wir die inneren und äußeren Teilpfade zusammenfügen. Wir werden codes verwenden, um den Typ jedes Eckpunkts (MOVETO, LINETO usw.) anzugeben. Anschließend werden wir ein Path-Objekt mit mpath.Path und ein PathPatch-Objekt mit mpatches.PathPatch erstellen. Schließlich werden wir das PathPatch-Objekt mit ax.add_patch() zum Axes-Objekt hinzufügen.

Path = mpath.Path
fig, ax = plt.subplots()

inside_vertices = make_circle(0.5)
outside_vertices = make_circle(1.0)
codes = np.ones(
    len(inside_vertices), dtype=mpath.Path.code_type) * mpath.Path.LINETO
codes[0] = mpath.Path.MOVETO

for i, (inside, outside) in enumerate(((1, 1), (1, -1), (-1, 1), (-1, -1))):
    ## Fügen Sie die inneren und äußeren Teilpfade zusammen, und ändern Sie ihre
    ## Reihenfolge nach Bedarf
    vertices = np.concatenate((outside_vertices[::outside],
                               inside_vertices[::inside]))
    ## Verschieben Sie den Pfad
    vertices[:, 0] += i * 2.5
    ## Die Codes werden alle "LINETO"-Anweisungen sein, außer "MOVETO" am
    ## Anfang jedes Teilpfads
    all_codes = np.concatenate((codes, codes))
    ## Erstellen Sie das Path-Objekt
    path = mpath.Path(vertices, all_codes)
    ## Fügen Sie es hinzu und zeichnen Sie es
    patch = mpatches.PathPatch(path, facecolor='#885500', edgecolor='black')
    ax.add_patch(patch)

    ax.annotate(f"Außen {wise(outside)},\nInnen {wise(inside)}",
                (i * 2.5, -1.5), va="top", ha="center")

ax.set_xlim(-2, 10)
ax.set_ylim(-3, 2)
ax.set_title('Mmm, donuts!')
ax.set_aspect(1.0)
plt.show()

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie man einen Donut mit Matplotlib's ~.path.Path und ~.patches.PathPatch erstellt. Wir haben die make_circle()-Funktion verwendet, um den Kreis zu erstellen, und die inneren und äußeren Teilpfade zusammengefügt, um den Donut zu erstellen. Wir haben auch gelernt, wie man den Typ jedes Eckpunkts angibt und ein Path-Objekt mit mpath.Path erstellt. Schließlich haben wir gelernt, wie man ein PathPatch-Objekt mit mpatches.PathPatch erstellt und es mit ax.add_patch() zum Axes-Objekt hinzufügt.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Lab "Erstellen von Donuts mit ~.path.Path und ~.patches.PathPatch" abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.