Annoter des figures avec AnnotationBbox

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons apprendre à utiliser AnnotationBbox dans Matplotlib pour annoter des figures à l'aide de texte, de formes et d'images. AnnotationBbox est une méthode de contrôle plus fine que Axes.annotate. Nous allons passer en revue trois OffsetBox différents : TextArea, DrawingArea et OffsetImage.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous réglerons rapidement le problème pour vous.

Tracer des points

Pour commencer, traçons deux points que nous annoterons plus tard.

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

## Définissez une première position à annoter (affichez-la avec un marqueur)
xy1 = (0.5, 0.7)
ax.plot(xy1[0], xy1[1], ".r")

## Définissez une deuxième position à annoter (ne l'affichez pas avec un marqueur cette fois)
xy2 = [0.3, 0.55]

## Fixez les limites d'affichage pour voir tout
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

plt.show()

Annoter avec TextArea

Maintenant, annotons le premier point à l'aide d'un TextArea.

from matplotlib.offsetbox import AnnotationBbox, TextArea

## Annoter la première position avec une boîte de texte ('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()

Annoter avec DrawingArea

Ensuite, annotons le second point avec un patch de cercle à l'aide de DrawingArea.

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

## Annoter la deuxième position avec un patch de cercle
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()

Annoter avec OffsetImage

Enfin, annotons le second point avec une OffsetImage en utilisant une image de Grace Hopper.

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

## Annoter la deuxième position avec une image (un tableau généré de pixels)
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)

## Annoter la deuxième position avec une autre image (un portrait de 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()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser AnnotationBbox dans Matplotlib pour annoter des figures à l'aide de texte, de formes et d'images. Nous avons étudié trois types différents d'OffsetBox : TextArea, DrawingArea et OffsetImage. En utilisant AnnotationBbox, nous avons un contrôle plus fin sur les annotations que lorsqu'on utilise Axes.annotate.