Elementos auxiliares (Círculo)
O patch
disponível para inserir círculos é o Circle
. É necessário passar apenas o parâmetro xy
para desenhar esta forma, que recebe uma tuple
com dois números, que são as coordenadas do centro do círculo. Por exemplo, para inserir um círculo em x = 2
e y = 2
:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.gca().add_patch(patches.Circle(xy=(2,2)))
plt.show()
Figura 1 - Gráfico de dispersão com um círculo inserido.
Observe que o círculo não ficou perfeito, o que ocorreu devido ao número de pixels utilizados em um eixo, comparado ao outro eixo. Neste exemplo, temos que os valores de x
e y
tem o mesmo range. Entretanto, a figura esta sendo criada mais larga (eixo x
) do que alta (eixo y
), e.g. figsize=(8,6)
. Dessa forma, existe um incompatibilidade entre os pixels do eixo x
e do eixo y
, o que faz com que o círculo fique visualmente distorcido, e seja renderizado de forma ovalada.
Para contornar este problema, temos algumas opções. A primeira delas, é utilizar uma figura de altura e largura iguais. Por exemplo:
plt.figure(figsize=(6,6))
plt.scatter(x,y)
plt.gca().add_patch(patches.Circle(xy=(2,2)))
plt.show()
Figura 2 - Gráfico de dispersão com um círculo inserido.
Uma outra alternativa, é adicionar o método plt.axis()
(que será estudado com mais detalhes um pouco a frente) e passar a str
"equal"
para este método, o que vai forçar a renderização de forma correta:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.gca().add_patch(patches.Circle(xy=(2,2)))
plt.axis("equal")
plt.show()
Figura 3 - Gráfico de dispersão com um círculo inserido.
Mas observe que agora a faixa do eixo x
é maior do que a faixa do eixo y
, sendo este o resultado da aplicação do plt.axis("equal")
.
A outra opção é desenhar uma elipse com formato de círculo (veremos em seguida como fazer).
Raio do círculo
Para determinar qual o raio o círculo terá, basta passar um número (int
ou float
) para o parâmetro radius
. Por padrão, radius=5
. Por exemplo, para desenhar um círculo de raio 1
:
plt.figure(figsize=(8,6))
plt.scatter(x,y)
plt.gca().add_patch(patches.Circle(xy=(2,2), radius=1))
plt.axis("equal")
plt.show()
Figura 4 - Gráfico de dispersão com um círculo inserido com raio igual a 1.
Edições
O patches.Circle
aceita uma série de parâmetros para a sua edição, sendo possível alterar a cor de preenchimento (color
ou facecolor
), remover o preenchimento (fill
), inserir linhas (linestyle
, linewidth
, edgecolor
), inserir estilos de preenchimento (hatch
), adicionar transparência (alpha
), determinar a ordem de plotagem (zorder
), inserir nome para legenda (label
), entre outros, de forma muito similar ao que temos feito até aqui.
Você encontra maiores detalhes na documentação.