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.