Um gráfico de dispersão exibe a relação entre 2 variáveis numéricas.
Cada ponto de dados é representado como um círculo.
Várias ferramentas permitem construir um gráfico de dispersão com Python, esta seção fornece exemplos de código para Seaborn, Matplotlib e Plotly para versões interativas.
A função regplot() da biblioteca Seaborn é definitivamente a melhor maneira de construir um gráfico de dispersão em minutos. 🔥
Usam-se séries numéricas de uma tabela de dados para as variáveis x e y.
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('iris')
sns.regplot(x=df["sepal_length"], y=df["sepal_width"])
plt.show()
Um mapa de calor é uma representação gráfica de dados onde cada valor de uma matriz é representado como uma cor.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random((5,5)), columns=["a","b","c","d","e"])
p1 = sns.heatmap(df)
plt.show()
Um correlograma ou matriz de correlação permite analisar a relação entre cada par de variáveis numéricas de uma matriz.
A correlação é visualizada como um gráfico de dispersão.
A diagonal representa a distribuição de cada variável com um histograma ou gráfico de densidade .
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('iris')
sns.pairplot(df)
plt.show()
A função scatterplot() do Seaborn permite construir gráficos de bolhas.
O parâmetro size controla o tamanho do círculo de acordo com uma variável numérica do conjunto de dados.
# pip install gapminder
import matplotlib.pyplot as plt
import seaborn as sns
from gapminder import gapminder # data set
data = gapminder.loc[gapminder.year == 2007]
sns.scatterplot(data=data, x="gdpPercap", y="lifeExp", size="pop", legend=False, sizes=(20, 2000))
plt.show()
O gráfico de dispersão conectada apresenta linhas onde cada ponto de dados é mostrado por um círculo ou qualquer tipo de marcador.
Esta seção explica como construir um gráfico de dispersão conectada com Python, usando as bibliotecas Matplotlib e Seaborn.
Construir um gráfico de dispersão conectada com Python e Matplotlib é muito fácil graças à função plot().
Os 2 primeiros argumentos são os valores x e y, respectivamente, por exemplo em uma tabela de dados de um dataframe Pandas.
Os argumentos linestyle e marker permitem usar linhas e círculos para fazer com que pareça um gráfico de dispersão conectada.
Isso significa que tudo está muito próximo de um gráfico de linhas ou de um gráfico de dispersão amplamente descrito na galeria.
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame({
'x_axis': range(1,10),
'y_axis': np.random.randn(9)*80+range(1,10)
})
plt.plot('x_axis', 'y_axis', data=df, linestyle='-', marker='o', ms=30)
plt.show()
Esta seção explica como construir um gráfico de densidade 2d ou um histograma 2d com Python.
Esses tipos de gráficos permitem visualizar a distribuição combinada de duas variáveis quantitativas.
Evite a sobreposição no gráfico de dispersão com o gráfico de densidade 2D.
Considere o gráfico de dispersão no lado esquerdo desta figura. Muitos pontos se sobrepõem e tornam a figura difícil de ler.
Pior ainda, é impossível determinar quantos pontos de dados estão em cada posição.
Nesse caso, uma solução possível é cortar a janela de plotagem em vários compartimentos e representar o número de pontos de dados em cada compartimento por uma cor.
Seguindo a forma do bin, isso faz com que o gráfico Hexbin ou o histograma 2D.
Então, é possível fazer um resultado mais suave usando o Gaussian KDE (estimativa de densidade do kernel).
Sua representação é chamada de gráfico de densidade 2D e você pode adicionar um contorno para denotar cada etapa.
Você pode ver mais exemplos desses tipos de gráficos na seção de densidade 2D da galeria de gráficos Python.
Este gráfico foi inspirado por uma questão de estouro de pilha.
# bibliotecas
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import kde
# criar dados: 200 pontos
data = np.random.multivariate_normal([0, 0], [[1, 0.5], [0.5, 3]], 200)
x, y = data.T
# Crie uma figura com 6 áreas de plotagem
fig, axes = plt.subplots(ncols=2, nrows=3, figsize=(10, 20))
# Tudo começa com um Scatterplot
axes[0,0].set_title('Gráfico de dispersão')
axes[0,0].plot(x, y, 'ko')
# Como você pode ver, há muita sobreposição aqui!
# Portanto, podemos cortar a janela de plotagem em vários hexbins
nbins = 20
axes[0,1].set_title('Hexbin')
axes[0,1].hexbin(x, y, gridsize=nbins, cmap=plt.cm.BuGn_r)
# 2D Histograma
axes[1,0].set_title('Histograma 2D')
axes[1,0].hist2d(x, y, bins=nbins, cmap=plt.cm.BuGn_r)
# Avalie uma kde gaussiana em uma grade regular de nbins x nbins sobre as extensões de dados
k = kde.gaussian_kde(data.T)
xi, yi = np.mgrid[x.min():x.max():nbins*1j, y.min():y.max():nbins*1j]
zi = k(np.vstack([xi.flatten(), yi.flatten()]))
# plotar uma densidade
axes[1,1].set_title('Calcular KDE Gaussiano')
axes[1,1].pcolormesh(xi, yi, zi.reshape(xi.shape), shading='auto', cmap=plt.cm.BuGn_r)
# adicionar sombreamento
axes[2,0].set_title('Densidade 2D com sombreamento')
axes[2,0].pcolormesh(xi, yi, zi.reshape(xi.shape), shading='gouraud', cmap=plt.cm.BuGn_r)
# contorno
axes[2,1].set_title('Contorno')
axes[2,1].pcolormesh(xi, yi, zi.reshape(xi.shape), shading='gouraud', cmap=plt.cm.BuGn_r)
axes[2,1].contour(xi, yi, zi.reshape(xi.shape) )
plt.show()