Curso matplotlib - Elementos auxiliares (Flechas)
Podemos utilizar o plt.arrow()
para adicionar uma flecha utilizando o matplotlib. Este elemento necessita de pelo menos 4 parâmetros, sendo os dois primeiros (x
e y
) as coordenadas de x
e y
onde a flecha inicia, e os outros dois são as distâncias em x
(dx
) e y
(dy
) até o final da seta.
Dessa forma, a flecha vai sair da coordenada (x,y)
e irá até a coordenada (x + dx, y + dy)
.
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5, 1, 0.5, 0.5)
plt.show()
Figura 1 - Gráfico de dispersão com flecha
Observe que a flecha ficou pequena, o que acontece devido ao outros elementos do gráfico e aos valores padrão para as flechas, em geral, serem pequenos. Retirando os pontos e plotando o gráfico:
plt.arrow(2.5,1, 0.5,0.5)
plt.show()
Figura 2 - Gráfico com flecha
Ainda temos uma flecha com a cabeça pequena, mas agora esta evidente que é uma flecha. Podemos alterar diversos parâmetros para melhorar esta flecha.
Largura do corpo da flecha
O parâmetro width
controla a largura do corpo da flecha (padrão é 0.001
).
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.01)
plt.show()
Figura 3 - Gráfico de dispersão com flecha
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.1)
plt.show()
Figura 4 - Gráfico de dispersão com flecha
Por padrão, o tamanho da flecha não inclui a ponta da flecha. Por isto que no gráfico acima, o intervalo de inicio e fim da flecha é maior do que o setado pelas coordenadas (x, y)
e (x+dx, y+dy)
.
Para fazer com que o comprimento da flecha inclua a ponta, basta passar o parâmetro length_includes_head
como True
(padrão é False
):
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.1, length_includes_head=True)
plt.show()
Figura 5 - Gráfico de dispersão com flecha
Largura da ponta da flecha
Podemos controlar a largura da ponta da flecha através do parâmetro head_width
. Idealmente, este parâmetro deve ser proporcional a outras partes da flecha. Como padrão, temos que head_width = 3*width
.
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.1, length_includes_head=True, head_width=3*0.1)
plt.show()
Figura 6 - Gráfico de dispersão com flecha
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.1, length_includes_head=True, head_width=2*0.1)
plt.show()
Figura 7 - Gráfico de dispersão com flecha
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.1, length_includes_head=True, head_width=1*0.1)
plt.show()
Figura 8 - Gráfico de dispersão com flecha
Comprimento da ponta da flecha
Também podemos controlar o comprimento da ponta da flecha, o que é feito através do parâmetro head_length
. Idealmente, este parâmetro deve ser proporcional a alguma parte da flecha, geralmente a largura da flecha (o padrão é 1.5*head_width
).
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.1, length_includes_head=True, head_length=0.5)
plt.show()
Figura 9 - Gráfico de dispersão com flecha
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.1, length_includes_head=True, head_length=0.1)
plt.show()
Figura 10 - Gráfico de dispersão com flecha
Forma da cabeça da flecha
Podemos controlar a forma da ponta da flecha através do parâmetro shape
. Temos 3 opções, sendo que o padrão 'full'
desenha uma ponta completa, 'right'
desenha apenas a parte à esquerda da ponta da flecha, e 'left'
desenha apenas a parte à direita da ponta da flecha.
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.1, length_includes_head=True, head_length=0.1, shape='right')
plt.show()
Figura 11 - Gráfico de dispersão com flecha
Exemplo:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.arrow(2.5,1, 0.5,0.5, width=0.1, length_includes_head=True, head_length=0.1, shape='left')
plt.show()
Figura 12 - Gráfico de dispersão com flecha
Maiores informações na documentação.