Guide fléché #

Ajout de patchs fléchés aux tracés.

Les flèches sont souvent utilisées pour annoter les tracés. Ce didacticiel montre comment tracer des flèches qui se comportent différemment lorsque les limites de données sur un tracé sont modifiées. En général, les points d'un tracé peuvent être soit fixés dans "l'espace de données" soit dans "l'espace d'affichage". Quelque chose tracé dans l'espace de données se déplace lorsque les limites de données sont modifiées - un exemple serait les points dans un nuage de points. Quelque chose tracé dans l'espace d'affichage reste statique lorsque les limites de données sont modifiées - un exemple serait un titre de figure ou les étiquettes d'axe.

Les flèches se composent d'une tête (et éventuellement d'une queue) et d'une tige tracée entre un point de départ et un point d'arrivée, appelés désormais "points d'ancrage". Nous montrons ici trois cas d'utilisation pour tracer des flèches, selon que la tête ou les points d'ancrage doivent être fixés dans les données ou dans l'espace d'affichage :

  1. Forme de la tête fixée dans l'espace d'affichage, points d'ancrage fixés dans l'espace de données

  2. Forme de la tête et points d'ancrage fixés dans l'espace d'affichage

  3. Patch entier corrigé dans l'espace de données

Ci-dessous, chaque cas d'utilisation est présenté tour à tour.

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
x_tail = 0.1
y_tail = 0.5
x_head = 0.9
y_head = 0.8
dx = x_head - x_tail
dy = y_head - y_tail

Forme de la tête fixée dans l'espace d'affichage et points d'ancrage fixés dans l'espace de données #

Ceci est utile si vous annotez un tracé et que vous ne souhaitez pas que la flèche change de forme ou de position si vous effectuez un panoramique ou une mise à l'échelle du tracé.

Dans ce cas, nous utilisons patches.FancyArrowPatch.

Notez que lorsque les limites de l'axe sont modifiées, la forme de la flèche reste la même, mais les points d'ancrage se déplacent.

fig, axs = plt.subplots(nrows=2)
arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100)
axs[0].add_patch(arrow)

arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100)
axs[1].add_patch(arrow)
axs[1].set(xlim=(0, 2), ylim=(0, 2))
guide fléché
[(0.0, 2.0), (0.0, 2.0)]

Forme de la tête et points d'ancrage fixés dans l'espace d'affichage #

Ceci est utile si vous annotez un tracé et que vous ne souhaitez pas que la flèche change de forme ou de position si vous effectuez un panoramique ou une mise à l'échelle du tracé.

Dans ce cas, nous utilisons patches.FancyArrowPatch, et passons l'argument mot-clé transform=ax.transAxesaxsont les axes auxquels nous ajoutons le patch.

Notez que lorsque les limites de l'axe sont modifiées, la forme et l'emplacement de la flèche restent les mêmes.

fig, axs = plt.subplots(nrows=2)
arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100,
                                 transform=axs[0].transAxes)
axs[0].add_patch(arrow)

arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100,
                                 transform=axs[1].transAxes)
axs[1].add_patch(arrow)
axs[1].set(xlim=(0, 2), ylim=(0, 2))
guide fléché
[(0.0, 2.0), (0.0, 2.0)]

Forme de la tête et points d'ancrage fixés dans l'espace de données #

Dans ce cas, nous utilisons patches.Arrow, ou patches.FancyArrow(ce dernier est en orange).

Notez que lorsque les limites de l'axe sont modifiées, la forme et l'emplacement de la flèche changent.

FancyArrowL'API de est relativement maladroite, et nécessite notamment de passer length_includes_head=Truepour que la pointe de la flèche soit éloignée du début de la flèche. Il n'est inclus dans cette référence que parce qu'il s'agit de la classe de flèche renvoyée par (en vert).(dx, dy)Axes.arrow

fig, axs = plt.subplots(nrows=2)

arrow = mpatches.Arrow(x_tail, y_tail, dx, dy)
axs[0].add_patch(arrow)
arrow = mpatches.FancyArrow(x_tail, y_tail - .4, dx, dy,
                            width=.1, length_includes_head=True, color="C1")
axs[0].add_patch(arrow)
axs[0].arrow(x_tail + 1, y_tail - .4, dx, dy,
             width=.1, length_includes_head=True, color="C2")

arrow = mpatches.Arrow(x_tail, y_tail, dx, dy)
axs[1].add_patch(arrow)
arrow = mpatches.FancyArrow(x_tail, y_tail - .4, dx, dy,
                            width=.1, length_includes_head=True, color="C1")
axs[1].add_patch(arrow)
axs[1].arrow(x_tail + 1, y_tail - .4, dx, dy,
             width=.1, length_includes_head=True, color="C2")
axs[1].set(xlim=(0, 2), ylim=(0, 2))
guide fléché
[(0.0, 2.0), (0.0, 2.0)]

Durée totale d'exécution du script : (0 minutes 1,191 secondes)

Galerie générée par Sphinx-Gallery