Crie seus próprios marcadores com Matplotlib
Na biblioteca matplotlib existem muitos marcadores que podem ser usados em diversas situações para representar um tipo de dado. Mas cada projeto tem suas necessidades e especificações. E não é raro você precisar de um marcador próprio para um projeto. Não sendo adequado os marcadores padrão da biblioteca. Como um projeto onde você precisa criar um marcador com a silhueta de um edifício, animal ou uma marca. Se esse é o seu caso não se preocupe pois a biblioteca matplotlib nos permite criar nossos próprios marcadores.
Como criar marcadores com a biblioteca matplotlib
A criação de um marcador segue a mesma logica da criação de um gráfico com pontos interligados. Para criar um gráfico precisamos das coordenadas de cada nó do gráfico. Quando existe mais de um nó no gráfico uma linha é traçada de um ponto ao outro, e assim sucessivamente até o último ponto, criando um figura. Na criação de um marcador seguimos a mesma lógica. Criamos os nós com as coordenadas e no final temos um conjunto de pontos conectados que formam uma imagem.
Exemplo
Executando o código acima o seu gráfico deve parecer com esse:
import numpy as np
import matplotlib.path as mpath
from matplotlib import pyplot as plt
forma = [
(0., -2., mpath.Path.MOVETO),
(2., 0., mpath.Path.LINETO),
(0., 2., mpath.Path.LINETO),
(-2., 0., mpath.Path.LINETO),
(0., -2., mpath.Path.CLOSEPOLY)
]
u, v, codes = zip(*forma)
novo_marcador = mpath.Path(np.asarray((u, v)).T, codes)
dados = np.random.rand(8, 8)
plt.scatter(dados[:,0], dados[:, 1], color=(1., 0., .40), marker=novo_marcador, s=64)
plt.show()
import matplotlib.path as mpath
from matplotlib import pyplot as plt
forma = [
(0., -2., mpath.Path.MOVETO),
(2., 0., mpath.Path.LINETO),
(0., 2., mpath.Path.LINETO),
(-2., 0., mpath.Path.LINETO),
(0., -2., mpath.Path.CLOSEPOLY)
]
u, v, codes = zip(*forma)
novo_marcador = mpath.Path(np.asarray((u, v)).T, codes)
dados = np.random.rand(8, 8)
plt.scatter(dados[:,0], dados[:, 1], color=(1., 0., .40), marker=novo_marcador, s=64)
plt.show()
Como funciona…
Nos exemplos anteriores passamos uma string para o parâmetro marker. Isso porque esses marcadores são marcadores predefinidos da biblioteca matplotlib. Assim só precisamos passar, como argumento do parâmetro, uma string correspondente a um marcador predefinido. Por isso só precisamos passar uma string. Mas o argumento do parâmetro marker também pode ser uma instância do Path.O método path é o responsável por criar o nosso novo marcador. Esse método deve receber dois argumentos: as coordenadas de cada ponto da nossa figura e uma instrução. Para facilitar o entendimento criamos uma lista com as coordenadas e a instrução. Assim não precisamos ter duas listas separadas, uma com as coordenadas e outra com as instruções. Mais o método path não pode receber essa lista do jeito que está, as coordenadas e as instruções devem estar separadas. Por isso usamos a função zip, que faz esse trabalho para nos.
O nosso marcador toma forma com o movimento do curso entre os pontos. Para o cursor saber o que esta fazendo ele precisa de instruções. Esse curso pode receber essas três instruções:
- MOVETO: Com essa instrução o cursor é posicionado na coordenada informada, mas nenhuma linha é desenhada.
- LINETO: Com essa instrução o curso é posicionado em outra posição. E dessa vez uma linha é traçada.
- CLOSEPOLY: Com essa instrução fechamos o nosso polígono/marcador.
0 comentários:
Postar um comentário