Nota
Fare clic qui per scaricare il codice di esempio completo
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:
Forma della testa fissata nello spazio di visualizzazione, punti di ancoraggio fissati nello spazio dati
Forma della testa e punti di ancoraggio fissati nello spazio espositivo
Intera patch riparata nello spazio dati
Di seguito ogni caso d'uso è presentato a sua volta.
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.
[(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.transAxes
dove ax
sono 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))
[(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.
FancyArrow
L'API di è relativamente scomoda e richiede in particolare di passare in
length_includes_head=True
modo 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))
[(0.0, 2.0), (0.0, 2.0)]
plt.show()
Tempo di esecuzione totale dello script: (0 minuti 1,191 secondi)