Einführung
In diesem Lab werden Sie lernen, wie Sie Winkelannotationen zu Klammerpfeilstilen hinzufügen, die mit FancyArrowPatch in Matplotlib erstellt werden. Winkelannotationen sind hilfreich, um die Richtung und Größe von Winkeln in einem Diagramm anzuzeigen. Am Ende dieses Labs werden Sie in der Lage sein, Klammerpfeilstile mit Winkelannotationen zu erstellen und sie an Ihre spezifischen Bedürfnisse anzupassen.
VM-Tipps
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 und Einrichten des Diagramms
Zunächst müssen wir die erforderlichen Bibliotheken importieren und das Diagramm einrichten. Wir werden matplotlib.pyplot und numpy verwenden. Wir werden auch ein Figure- und ein Axes-Objekt erstellen, um unsere Daten darauf zu plotten.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import FancyArrowPatch
fig, ax = plt.subplots()
ax.set(xlim=(0, 6), ylim=(-1, 5))
ax.set_title("Orientation of the bracket arrows relative to angleA and angleB")
Definieren einer Funktion, um den Punkt einer gedrehten vertikalen Linie zu erhalten
Wir werden eine Funktion definieren, die die Ursprungskoordinaten, die Linienlänge und den Winkel in Grad als Eingaben nimmt und die xy-Koordinaten des Endpunkts der vertikalen Linie zurückgibt, die um den angegebenen Winkel gedreht ist.
def get_point_of_rotated_vertical(origin, line_length, degrees):
"""Return xy coordinates of the vertical line end rotated by degrees."""
rad = np.deg2rad(-degrees)
return [origin[0] + line_length * np.sin(rad),
origin[1] + line_length * np.cos(rad)]
Erstellen von Klammerpfeilen mit Winkelannotationen
Wir werden mit FancyArrowPatch drei Klammerpfeilstile mit Winkelannotationen erstellen. Jeder Klammerpfeil wird einen anderen Winkelwert für angleA und angleB haben. Wir werden auch vertikale Linien hinzufügen, um die Position der Winkelannotationen anzuzeigen.
style = ']-['
for i, angle in enumerate([-40, 0, 60]):
y = 2*i
arrow_centers = ((1, y), (5, y))
vlines = ((1, y + 0.5), (5, y + 0.5))
anglesAB = (angle, -angle)
bracketstyle = f"{style}, angleA={anglesAB[0]}, angleB={anglesAB[1]}"
bracket = FancyArrowPatch(*arrow_centers, arrowstyle=bracketstyle,
mutation_scale=42)
ax.add_patch(bracket)
ax.text(3, y + 0.05, bracketstyle, ha="center", va="bottom", fontsize=14)
ax.vlines([line[0] for line in vlines], [y, y], [line[1] for line in vlines],
linestyles="--", color="C0")
Hinzufügen von Winkelannotationspfeilen und -texten
Wir werden Winkelannotationspfeile und -texte zu jedem Klammerpfeilstil hinzufügen. Zunächst werden wir die oberen Koordinaten für die gezeichneten Patches bei angleA und angleB ermitteln. Dann werden wir die Verbindungsrichtungen für die Annotationspfeile definieren. Schließlich werden wir Pfeile und Annotationstexte zum Diagramm hinzufügen.
## Get the top coordinates for the drawn patches at A and B
patch_tops = [get_point_of_rotated_vertical(center, 0.5, angle)
for center, angle in zip(arrow_centers, anglesAB)]
## Define the connection directions for the annotation arrows
connection_dirs = (1, -1) if angle > 0 else (-1, 1)
## Add arrows and annotation text
arrowstyle = "Simple, tail_width=0.5, head_width=4, head_length=8"
for vline, dir, patch_top, angle in zip(vlines, connection_dirs,
patch_tops, anglesAB):
kw = dict(connectionstyle=f"arc3,rad={dir * 0.5}",
arrowstyle=arrowstyle, color="C0")
ax.add_patch(FancyArrowPatch(vline, patch_top, **kw))
ax.text(vline[0] - dir * 0.15, y + 0.7, f'{angle}°', ha="center",
va="center")
Zeige das Diagramm an
Wir werden das Diagramm mit plt.show() anzeigen.
plt.show()
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie Winkelannotationen zu Klammerpfeilstilen hinzufügen, die mit FancyArrowPatch in Matplotlib erstellt wurden. Sie haben auch gelernt, wie Sie die Klammerpfeilstile an Ihre spezifischen Bedürfnisse anpassen. Indem Sie den Schritt-für-Schritt-Anleitungen und dem bereitgestellten Beispielcode folgen, sollten Sie jetzt in der Lage sein, Klammerpfeilstile mit Winkelannotationen in Ihren eigenen Matplotlib-Diagrammen zu erstellen.