Dispersão Matplotlib
Criando gráficos de dispersão
Com o Pyplot, você pode usar a scatter()
função para desenhar um gráfico de dispersão.
A scatter()
função traça um ponto para cada observação. Ele precisa de duas matrizes do mesmo comprimento, uma para os valores do eixo x e outra para os valores do eixo y:
Exemplo
Um gráfico de dispersão simples:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y)
plt.show()
Resultado:
A observação no exemplo acima é o resultado de 13 carros passando.
O eixo X mostra a idade do carro.
O eixo Y mostra a velocidade do carro quando ele passa.
Há alguma relação entre as observações?
Parece que quanto mais novo o carro, mais rápido ele anda, mas isso pode ser uma coincidência, afinal só registramos 13 carros.
Comparar parcelas
No exemplo acima, parece haver uma relação entre velocidade e idade, mas e se plotarmos as observações de outro dia também? O gráfico de dispersão nos dirá mais alguma coisa?
Exemplo
Desenhe dois gráficos na mesma figura:
import matplotlib.pyplot as plt
import numpy as np
#day one, the age
and speed of 13 cars:
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y)
#day two, the age and speed of 15 cars:
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y)
plt.show()
Resultado:
Nota: Os dois gráficos são plotados com duas cores diferentes, por padrão azul e laranja, você aprenderá como alterar as cores mais adiante neste capítulo.
Ao comparar os dois gráficos, acho que é seguro dizer que ambos nos dão a mesma conclusão: quanto mais novo o carro, mais rápido ele dirige.
Cores
Você pode definir sua própria cor para cada gráfico de dispersão com
color
o argumento ou c
:
Exemplo
Defina sua própria cor dos marcadores:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y, color = 'hotpink')
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')
plt.show()
Resultado:
Colorir cada ponto
Você pode até definir uma cor específica para cada ponto usando uma matriz de cores como valor para o
c
argumento:
Nota: Você não pode usar o color
argumento para isso, apenas o c
argumento.
Exemplo
Defina sua própria cor dos marcadores:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
Resultado:
Mapa de cores
O módulo Matplotlib tem vários mapas de cores disponíveis.
Um mapa de cores é como uma lista de cores, onde cada cor tem um valor que varia de 0 a 100.
Aqui está um exemplo de um mapa de cores:
Este mapa de cores é chamado de 'viridis' e, como você pode ver, varia de 0, que é uma cor roxa, e até 100, que é uma cor amarela.
Como usar o ColorMap
Você pode especificar o mapa de cores com o argumento de palavra-chave
cmap
com o valor do mapa de cores, neste caso, 'viridis'
que é um dos mapas de cores integrados disponíveis no Matplotlib.
Além disso, você deve criar um array com valores (de 0 a 100), um valor para cada ponto no gráfico de dispersão:
Exemplo
Crie uma matriz de cores e especifique um mapa de cores no gráfico de dispersão:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.show()
Resultado:
Você pode incluir o mapa de cores no desenho incluindo a plt.colorbar()
declaração:
Exemplo
Inclua o mapa de cores real:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()
Resultado:
Mapas de cores disponíveis
Você pode escolher qualquer um dos mapas de cores integrados:
Name | Reverse | |||
---|---|---|---|---|
Accent | Accent_r | |||
Blues | Blues_r | |||
BrBG | BrBG_r | |||
BuGn | BuGn_r | |||
BuPu | BuPu_r | |||
CMRmap | CMRmap_r | |||
Dark2 | Dark2_r | |||
GnBu | GnBu_r | |||
Greens | Greens_r | |||
Greys | Greys_r | |||
OrRd | OrRd_r | |||
Oranges | Oranges_r | |||
PRGn | PRGn_r | |||
Paired | Paired_r | |||
Pastel1 | Pastel1_r | |||
Pastel2 | Pastel2_r | |||
PiYG | PiYG_r | |||
PuBu | PuBu_r | |||
PuBuGn | PuBuGn_r | |||
PuOr | PuOr_r | |||
PuRd | PuRd_r | |||
Purples | Purples_r | |||
RdBu | RdBu_r | |||
RdGy | RdGy_r | |||
RdPu | RdPu_r | |||
RdYlBu | RdYlBu_r | |||
RdYlGn | RdYlGn_r | |||
Reds | Reds_r | |||
Set1 | Set1_r | |||
Set2 | Set2_r | |||
Set3 | Set3_r | |||
Spectral | Spectral_r | |||
Wistia | Wistia_r | |||
YlGn | YlGn_r | |||
YlGnBu | YlGnBu_r | |||
YlOrBr | YlOrBr_r | |||
YlOrRd | YlOrRd_r | |||
afmhot | afmhot_r | |||
autumn | autumn_r | |||
binary | binary_r | |||
bone | bone_r | |||
brg | brg_r | |||
bwr | bwr_r | |||
cividis | cividis_r | |||
cool | cool_r | |||
coolwarm | coolwarm_r | |||
copper | copper_r | |||
cubehelix | cubehelix_r | |||
flag | flag_r | |||
gist_earth | gist_earth_r | |||
gist_gray | gist_gray_r | |||
gist_heat | gist_heat_r | |||
gist_ncar | gist_ncar_r | |||
gist_rainbow | gist_rainbow_r | |||
gist_stern | gist_stern_r | |||
gist_yarg | gist_yarg_r | |||
gnuplot | gnuplot_r | |||
gnuplot2 | gnuplot2_r | |||
gray | gray_r | |||
hot | hot_r | |||
hsv | hsv_r | |||
inferno | inferno_r | |||
jet | jet_r | |||
magma | magma_r | |||
nipy_spectral | nipy_spectral_r | |||
ocean | ocean_r | |||
pink | pink_r | |||
plasma | plasma_r | |||
prism | prism_r | |||
rainbow | rainbow_r | |||
seismic | seismic_r | |||
spring | spring_r | |||
summer | summer_r | |||
tab10 | tab10_r | |||
tab20 | tab20_r | |||
tab20b | tab20b_r | |||
tab20c | tab20c_r | |||
terrain | terrain_r | |||
twilight | twilight_r | |||
twilight_shifted | twilight_shifted_r | |||
viridis | viridis_r | |||
winter | winter_r |
Tamanho
Você pode alterar o tamanho dos pontos com o
s
argumento.
Assim como as cores, certifique-se de que a matriz para tamanhos tenha o mesmo comprimento que as matrizes para os eixos x e y:
Exemplo
Defina seu próprio tamanho para os marcadores:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes)
plt.show()
Resultado:
Alfa
Você pode ajustar a transparência dos pontos com o
alpha
argumento.
Assim como as cores, certifique-se de que a matriz para tamanhos tenha o mesmo comprimento que as matrizes para os eixos x e y:
Exemplo
Defina seu próprio tamanho para os marcadores:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes, alpha=0.5)
plt.show()
Resultado:
Combinar tamanho de cor e alfa
Você pode combinar um mapa de cores com diferentes tamanhos nos pontos. Isso é melhor visualizado se os pontos forem transparentes:
Exemplo
Crie matrizes aleatórias com 100 valores para pontos x, pontos y, cores e tamanhos:
import matplotlib.pyplot as plt
import numpy as np
x =
np.random.randint(100, size=(100))
y = np.random.randint(100, size=(100))
colors = np.random.randint(100, size=(100))
sizes = 10 * np.random.randint(100,
size=(100))
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='nipy_spectral')
plt.colorbar()
plt.show()
Resultado: