Guia de Setas Matplotlib

Beginner

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

Introdução

Setas são frequentemente usadas para anotar gráficos. Este tutorial demonstra como plotar setas que se comportam de maneira diferente quando os limites de dados em um gráfico são alterados.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido às limitações do Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Formato da ponta fixo no espaço de exibição, pontos de ancoragem fixos no espaço de dados

Isso é útil se você estiver anotando um gráfico e não quiser que a seta mude de formato ou posição se você fizer pan ou escalar o gráfico.

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

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

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

plt.show()

Formato da ponta e pontos de ancoragem fixos no espaço de exibição

Isso é útil se você estiver anotando um gráfico e não quiser que a seta mude de formato ou posição se você fizer pan ou escalar o gráfico.

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

plt.show()

Patch inteiro fixo no espaço de dados

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

plt.show()

Resumo

Este tutorial mostrou como plotar setas que se comportam de maneira diferente quando os limites de dados em um gráfico são alterados. Ele abordou três casos de uso para plotar setas, dependendo se a ponta (head) ou os pontos de ancoragem (anchor points) precisam ser fixados no espaço de dados ou no espaço de exibição. Esses casos de uso podem ser úteis para anotar gráficos e garantir que a seta permaneça na posição correta, mesmo que o gráfico seja movido (panned) ou escalado.