Gráficos de dispersão e gráficos de pares
Crie gráficos de dispersão coloridos por uma terceira variável com sns.scatterplot e visualize todas as relações entre pares com sns.pairplot.
Gráficos de dispersão e gráficos de pares é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
Visualizando relações entre variáveis
Os gráficos de distribuição mostram uma variável por vez. Quando você quer compreender a relação entre duas variáveis numéricas, precisa de gráficos de dispersão e visualizações relacionadas. Eles ajudam a identificar correlação (as duas variáveis aumentam juntas?), aglomerados (há subgrupos nos dados?) e valores atípicos (há pontos incomuns distantes da nuvem principal?). O Seaborn facilita tudo isso com scatterplot e pairplot.
import seaborn as sns
import matplotlib.pyplot as plt
# Load the classic iris dataset
iris = sns.load_dataset('iris')
print(iris.head())
print('\nShape:', iris.shape)Gráfico de dispersão básico com sns.scatterplot
sns.scatterplot(data, x, y) representa cada observação como um ponto em suas coordenadas (x, y). Diferentemente de plt.scatter do Matplotlib, a versão do Seaborn se vincula automaticamente a um DataFrame e integra-se às semânticas hue, size e style. O resultado são gráficos informativos com várias variáveis usando uma única chamada de função e uma legenda automática.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.scatterplot(data=tips, x='total_bill', y='tip')
plt.title('Tip vs Total Bill')
plt.xlabel('Total Bill ($)')
plt.ylabel('Tip ($)')
plt.show()Codificando uma terceira variável com hue
O parâmetro hue atribui uma cor a cada ponto com base em uma terceira variável, que pode ser categórica ou numérica. Quando hue é uma coluna categórica, como 'smoker', o Seaborn usa cores distintas. Quando hue é uma coluna numérica, ele usa um mapa de cores sequencial. Isso permite visualizar três variáveis simultaneamente em um gráfico 2D sem adicionar um terceiro eixo.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.scatterplot(
data=tips,
x='total_bill',
y='tip',
hue='time', # Lunch vs Dinner
style='smoker', # marker shape
palette='deep'
)
plt.title('Tip vs Bill by Time and Smoker Status')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()Codificando tamanho e estilo
Além de hue, os gráficos de dispersão do Seaborn aceitam size (a área do ponto codifica uma variável numérica) e style (o formato do marcador codifica uma variável categórica). Usar as três semânticas simultaneamente pode revelar padrões complexos com várias variáveis, mas também pode sobrecarregar o leitor. Uma orientação prática é usar primeiro hue (o mais evidente), depois style e, por último, size, apenas quando necessário.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.scatterplot(
data=tips,
x='total_bill',
y='tip',
hue='day',
size='size', # party size controls marker area
sizes=(20, 200), # min and max dot area
alpha=0.7
)
plt.title('Tip vs Bill — Colour=Day, Size=Party Size')
plt.legend(bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()Adicionando uma linha de regressão com regplot
sns.regplot() desenha um gráfico de dispersão e sobrepõe uma linha de regressão linear com uma faixa de confiança de 95% sombreada. Isso é útil para visualizar a intensidade e a direção da relação linear entre duas variáveis. A faixa de confiança se estreita nas regiões com muitos dados e se amplia nas extremidades, onde menos pontos contribuem para o ajuste.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.regplot(
data=tips,
x='total_bill',
y='tip',
scatter_kws={'alpha': 0.4},
line_kws={'color': 'red'}
)
plt.title('Tip vs Bill with Regression Line')
plt.show()lmplot: gráficos de regressão facetados
sns.lmplot() é a versão no nível da figura de regplot. Ele aceita hue (linhas de regressão separadas por grupo no mesmo painel) e col/row (painéis separados). Isso é útil para testar se a relação entre duas variáveis difere entre subgrupos — por exemplo, se a relação entre conta e gorjeta é mais inclinada no jantar do que no almoço.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Separate regression line per time (Lunch / Dinner)
sns.lmplot(
data=tips,
x='total_bill',
y='tip',
hue='time',
scatter_kws={'alpha': 0.4},
height=5
)
plt.suptitle('Regression by Meal Time', y=1.02)
plt.show()Introdução aos gráficos de pares
sns.pairplot(df) cria uma grade de gráficos de dispersão para cada par de colunas numéricas do DataFrame, com gráficos de distribuição na diagonal. Essa é a maneira mais rápida de visualizar, em uma única chamada, todas as relações entre pares de variáveis em um conjunto de dados. Para um DataFrame com n colunas numéricas, pairplot cria uma grade n×n. Ele é mais prático quando n está entre 3 e 8 — grades maiores ficam pequenas demais para serem lidas.
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
# Create pairplot coloured by species
sns.pairplot(iris, hue='species', diag_kind='kde', plot_kws={'alpha': 0.5})
plt.suptitle('Iris Dataset Pairplot', y=1.02)
plt.show()Personalizando a diagonal de pairplot
O parâmetro diag_kind controla o que aparece na diagonal da grade de pairplot. Use 'hist' para histogramas ou 'kde' para estimativas de densidade por núcleo. A diagonal mostra a distribuição univariada de cada variável, enquanto os painéis fora da diagonal mostram gráficos de dispersão entre pares. Você também pode usar corner=True para mostrar apenas o triângulo inferior, reduzindo pela metade o número de painéis e diminuindo a redundância.
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
# Show only lower triangle
sns.pairplot(
iris,
hue='species',
diag_kind='hist',
corner=True
)
plt.show()PairGrid para personalização completa
sns.PairGrid oferece controle total sobre o tipo de gráfico exibido em cada seção da matriz. Use g.map_upper(), g.map_lower() e g.map_diag() para atribuir funções diferentes, como regplot no triângulo superior e kdeplot no inferior. Isso produz gráficos com qualidade de publicação, nos quais cada painel transmite informações distintas sobre o par de variáveis.
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
numeric_iris = iris.drop(columns=['species'])
g = sns.PairGrid(numeric_iris)
g.map_upper(sns.scatterplot, alpha=0.3)
g.map_lower(sns.kdeplot, fill=True)
g.map_diag(sns.histplot, kde=True)
plt.suptitle('Custom PairGrid', y=1.02)
plt.show()Identificando correlações em gráficos de dispersão
Ao ler um gráfico de dispersão, estime a direção (a nuvem sobe ou desce?), a força (quão próximos da tendência estão os pontos?) e a forma (linear ou curva?) da relação. O coeficiente de correlação r varia de -1 (negativa perfeita) a +1 (positiva perfeita), sendo 0 indicativo de ausência de relação linear. Lembre-se: correlação não implica causalidade, e uma relação não linear pode ter r ≈ 0.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x = np.linspace(0, 10, 100)
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
# Strong positive correlation
axes[0].scatter(x, x + np.random.normal(0, 0.5, 100))
axes[0].set_title('Strong Positive (r≈0.99)')
# Weak correlation
axes[1].scatter(x, np.random.normal(5, 3, 100))
axes[1].set_title('No Correlation (r≈0)')
# Non-linear (quadratic) — r can be low
axes[2].scatter(x, (x-5)**2 + np.random.normal(0, 1, 100))
axes[2].set_title('Non-linear (r low despite pattern)')
plt.tight_layout()
plt.show()jointplot para dados bivariados com marginais
sns.jointplot() combina um gráfico bivariado central com gráficos univariados marginais nas bordas superior e direita. Passe kind='scatter', 'hex', 'kde' ou 'reg'. O tipo hex é útil quando há milhares de pontos sobrepostos — ele os agrupa em hexágonos e usa cores para mostrar a densidade, resolvendo o problema de sobreposição que torna os gráficos de dispersão ilegíveis em grandes conjuntos de dados.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# KDE joint plot with marginal distributions
sns.jointplot(
data=tips,
x='total_bill',
y='tip',
kind='reg',
marginal_kws={'bins': 20}
)
plt.suptitle('Joint Distribution of Bill and Tip', y=1.02)
plt.show()Verificação rápida
Teste sua compreensão dos gráficos de dispersão e de pares do Seaborn apresentados nesta lição.
Resumo da lição
Nesta lição, você aprendeu que sns.scatterplot codifica até quatro variáveis usando x, y, hue, size e style; sns.regplot/lmplot sobrepõe uma linha de regressão para quantificar relações lineares; e sns.pairplot produz uma grade com todos os pares, ideal para a análise exploratória de conjuntos de dados multivariados. A seguir, exploraremos mapas de calor para visualizar matrizes de correlação.
Aprenda Python com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Gráficos de dispersão e gráficos de pares” é grátis?
Sim — o texto completo de “Gráficos de dispersão e gráficos de pares” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
O que vou aprender em “Gráficos de dispersão e gráficos de pares”?
Crie gráficos de dispersão coloridos por uma terceira variável com sns.scatterplot e visualize todas as relações entre pares com sns.pairplot. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Pandas & NumPy Academy?
Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Gráficos de dispersão e gráficos de pares”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Pandas & NumPy Academy?
Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Gráficos de distribuição: histplot e kdeplot
- Gráficos categóricos: boxplot, barplot e violinplot
- Gráficos de dispersão e gráficos de pares
- Mapas de calor para matrizes de correlação