Ajouter des annotations d'angle aux flèches de Matplotlib

Beginner

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

Introduction

Dans ce laboratoire, vous allez apprendre à ajouter des annotations d'angle aux styles de flèches croisées créés à l'aide de FancyArrowPatch dans Matplotlib. Les annotations d'angle sont utiles pour indiquer la direction et la taille des angles dans un graphique. À la fin de ce laboratoire, vous serez capable de créer des styles de flèches croisées avec des annotations d'angle et de les personnaliser pour répondre à vos besoins spécifiques.

Conseils sur la machine virtuelle

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

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet 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ésoudrons rapidement le problème pour vous.

Importez les bibliothèques nécessaires et configurez le tracé

Tout d'abord, nous devons importer les bibliothèques nécessaires et configurer le tracé. Nous utiliserons matplotlib.pyplot et numpy. Nous allons également créer une figure et un objet axe pour tracer nos données dessus.

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 des flèches croisées par rapport à angleA et angleB")

Définissez une fonction pour obtenir le point d'une ligne verticale tournée

Nous allons définir une fonction qui prend les coordonnées d'origine, la longueur de la ligne et l'angle en degrés en entrée et renvoie les coordonnées xy de l'extrémité de la ligne verticale tournée de l'angle spécifié.

def get_point_of_rotated_vertical(origin, line_length, degrees):
    """Renvoie les coordonnées xy de l'extrémité de la ligne verticale tournée de degrees."""
    rad = np.deg2rad(-degrees)
    return [origin[0] + line_length * np.sin(rad),
            origin[1] + line_length * np.cos(rad)]

Créez des flèches croisées avec des annotations d'angle

Nous allons créer trois styles de flèches croisées avec des annotations d'angle à l'aide de FancyArrowPatch. Chaque flèche croisée aura une valeur d'angle différente pour angleA et angleB. Nous ajouterons également des lignes verticales pour indiquer la position des annotations d'angle.

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")

Ajoutez des flèches et du texte d'annotation d'angle

Nous allons ajouter des flèches et du texte d'annotation d'angle à chaque style de flèche croisée. Tout d'abord, nous obtiendrons les coordonnées du haut pour les patches dessinées à angleA et angleB. Ensuite, nous définirons les directions de connexion pour les flèches d'annotation. Enfin, nous ajouterons des flèches et du texte d'annotation au tracé.

    ## Obtenez les coordonnées du haut pour les patches dessinées à A et B
    patch_tops = [get_point_of_rotated_vertical(center, 0.5, angle)
                  for center, angle in zip(arrow_centers, anglesAB)]
    ## Définissez les directions de connexion pour les flèches d'annotation
    connection_dirs = (1, -1) if angle > 0 else (-1, 1)
    ## Ajoutez des flèches et du texte d'annotation
    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")

Affichez le tracé

Nous allons afficher le tracé à l'aide de plt.show().

plt.show()

Récapitulatif

Dans ce laboratoire, vous avez appris à ajouter des annotations d'angle à des styles de flèches croisées créées à l'aide de FancyArrowPatch dans Matplotlib. Vous avez également appris à personnaliser les styles de flèches croisées pour répondre à vos besoins spécifiques. En suivant les instructions étape par étape et le code d'exemple fournis, vous devriez désormais être en mesure de créer des styles de flèches croisées avec des annotations d'angle dans vos propres tracés Matplotlib.