Figuren mit AnnotationBbox annotieren

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 Lab werden wir lernen, wie man AnnotationBbox in Matplotlib verwendet, um Figuren mit Text, Formen und Bildern zu annotieren. AnnotationBbox ist eine feiner kontrollierbare Methode als Axes.annotate. Wir werden drei verschiedene OffsetBoxes durchgehen: TextArea, DrawingArea und OffsetImage.

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 nutzen.

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 während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Punkte plotten

Beginnen wir mit dem Plotten von zwei Punkten, die wir später annotieren werden.

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

## Definiere eine erste Position zum Annotieren (zeige sie mit einem Marker an)
xy1 = (0.5, 0.7)
ax.plot(xy1[0], xy1[1], ".r")

## Definiere eine zweite Position zum Annotieren (zeige sie diesmal nicht mit einem Marker an)
xy2 = [0.3, 0.55]

## Setze die Anzeigegrenzen, um alles zu sehen
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

plt.show()

Annotation mit TextArea

Annotieren wir nun den ersten Punkt mit einem TextArea.

from matplotlib.offsetbox import AnnotationBbox, TextArea

## Annotiere die erste Position mit einem Textfeld ('Test 1')
offsetbox = TextArea("Test 1")

ab = AnnotationBbox(offsetbox, xy1,
                    xybox=(-20, 40),
                    xycoords='data',
                    boxcoords="offset points",
                    arrowprops=dict(arrowstyle="->"),
                    bboxprops=dict(boxstyle="sawtooth"))

ax.add_artist(ab)

plt.show()

Annotation mit DrawingArea

Als nächstes annotieren wir den zweiten Punkt mit einem Kreis-Patch mithilfe von DrawingArea.

from matplotlib.offsetbox import DrawingArea
from matplotlib.patches import Circle

## Annotiere die zweite Position mit einem Kreis-Patch
da = DrawingArea(20, 20, 0, 0)
p = Circle((10, 10), 10)
da.add_artist(p)

ab = AnnotationBbox(da, xy2,
                    xybox=(1., xy2[1]),
                    xycoords='data',
                    boxcoords=("axes fraction", "data"),
                    box_alignment=(0.2, 0.5),
                    arrowprops=dict(arrowstyle="->"),
                    bboxprops=dict(alpha=0.5))

ax.add_artist(ab)

plt.show()

Annotation mit OffsetImage

Schließlich annotieren wir den zweiten Punkt mit einem OffsetImage, indem wir ein Bild von Grace Hopper verwenden.

from matplotlib.cbook import get_sample_data
from matplotlib.offsetbox import OffsetImage

## Annotiere die zweite Position mit einem Bild (ein generiertes Array von Pixeln)
arr = np.arange(100).reshape((10, 10))
im = OffsetImage(arr, zoom=2)
im.image.axes = ax

ab = AnnotationBbox(im, xy2,
                    xybox=(-50., 50.),
                    xycoords='data',
                    boxcoords="offset points",
                    pad=0.3,
                    arrowprops=dict(arrowstyle="->"))

ax.add_artist(ab)

## Annotiere die zweite Position mit einem anderen Bild (ein Portrait von Grace Hopper)
with get_sample_data("grace_hopper.jpg") as file:
    arr_img = plt.imread(file)

imagebox = OffsetImage(arr_img, zoom=0.2)
imagebox.image.axes = ax

ab = AnnotationBbox(imagebox, xy2,
                    xybox=(120., -80.),
                    xycoords='data',
                    boxcoords="offset points",
                    pad=0.5,
                    arrowprops=dict(
                        arrowstyle="->",
                        connectionstyle="angle,angleA=0,angleB=90,rad=3")
                    )

ax.add_artist(ab)

plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man AnnotationBbox in Matplotlib verwendet, um Figuren mit Text, Formen und Bildern zu annotieren. Wir haben uns drei verschiedene OffsetBoxes angeschaut: TextArea, DrawingArea und OffsetImage. Durch die Verwendung von AnnotationBbox haben wir eine feiner kontrollierbare Annotation als mit Axes.annotate.