Guida della freccia #

Aggiunta di patch freccia ai grafici.

Le frecce sono spesso utilizzate per annotare i grafici. Questo tutorial mostra come tracciare frecce che si comportano in modo diverso quando i limiti dei dati su un grafico vengono modificati. In generale, i punti su un grafico possono essere fissati nello "spazio dati" o nello "spazio di visualizzazione". Qualcosa tracciato nello spazio dei dati si sposta quando i limiti dei dati vengono modificati: un esempio potrebbero essere i punti in un grafico a dispersione. Qualcosa tracciato nello spazio di visualizzazione rimane statico quando i limiti dei dati vengono modificati: un esempio potrebbe essere il titolo di una figura o le etichette degli assi.

Le frecce sono costituite da una testa (ed eventualmente una coda) e da uno stelo disegnato tra un punto iniziale e un punto finale, chiamati d'ora in poi "punti di ancoraggio". Qui mostriamo tre casi d'uso per tracciare le frecce, a seconda che la testa o i punti di ancoraggio debbano essere fissati nei dati o nello spazio di visualizzazione:

  1. Forma della testa fissata nello spazio di visualizzazione, punti di ancoraggio fissati nello spazio dati

  2. Forma della testa e punti di ancoraggio fissati nello spazio espositivo

  3. Intera patch riparata nello spazio dati

Di seguito ogni caso d'uso è presentato a sua volta.

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

Forma della testa fissata nello spazio di visualizzazione e punti di ancoraggio fissati nello spazio dati #

Questo è utile se stai annotando un grafico e non vuoi che la freccia cambi forma o posizione se esegui una panoramica o ridimensioni il grafico.

In questo caso usiamo patches.FancyArrowPatch.

Si noti che quando i limiti dell'asse vengono modificati, la forma della freccia rimane la stessa, ma i punti di ancoraggio si spostano.

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))
guida a freccia
[(0.0, 2.0), (0.0, 2.0)]

Forma della testa e punti di ancoraggio fissati nello spazio espositivo #

Questo è utile se stai annotando un grafico e non vuoi che la freccia cambi forma o posizione se esegui una panoramica o ridimensioni il grafico.

In questo caso usiamo patches.FancyArrowPatch, e passiamo l'argomento della parola chiave transform=ax.transAxesdove axsono gli assi a cui stiamo aggiungendo la patch.

Si noti che quando i limiti dell'asse vengono modificati, la forma e la posizione della freccia rimangono le stesse.

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))
guida a freccia
[(0.0, 2.0), (0.0, 2.0)]

Forma della testa e punti di ancoraggio fissati nello spazio dati #

In questo caso usiamo patches.Arrow, o patches.FancyArrow(quest'ultimo è in arancione).

Si noti che quando i limiti dell'asse vengono modificati, la forma e la posizione della freccia cambiano.

FancyArrowL'API di è relativamente scomoda e richiede in particolare di passare in length_includes_head=Truemodo che la punta della freccia sia lontana dall'inizio della freccia. È incluso in questo riferimento solo perché è la classe arrow restituita da (in verde).(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))
guida a freccia
[(0.0, 2.0), (0.0, 2.0)]

Tempo di esecuzione totale dello script: (0 minuti 1,191 secondi)

Galleria generata da Sphinx-Gallery