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.