Gráficos de distribuição: histplot e kdeplot
Visualize o formato de uma distribuição numérica com sns.histplot e sobreponha uma estimativa de densidade de kernel com sns.kdeplot.
Gráficos de distribuição: histplot e kdeplot é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 1 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.
Seaborn e Gráficos de Distribuição
O Seaborn é uma biblioteca de visualização estatística de dados construída sobre o Matplotlib. Ela oferece uma API de alto nível que cria gráficos bonitos e informativos com pouco código. Uma das primeiras coisas que você precisa entender sobre qualquer conjunto de dados é o formato de suas distribuições — e histplot e kdeplot do Seaborn são as principais ferramentas para isso.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# Load a built-in dataset
tips = sns.load_dataset('tips')
print(tips.head())Criando um Histograma Básico com histplot
sns.histplot(data, x='column') cria um histograma de uma variável numérica. Por padrão, o Seaborn escolhe automaticamente uma quantidade adequada de intervalos usando a regra de Sturges. Você pode personalizar a quantidade de intervalos com o parâmetro bins ou deixar que o Seaborn escolha automaticamente. A altura de cada barra representa a contagem de observações naquele intervalo.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Basic histogram of total bill amounts
sns.histplot(data=tips, x='total_bill')
plt.title('Distribution of Total Bill')
plt.xlabel('Total Bill ($)')
plt.show()Controlando os Intervalos e o Parâmetro stat
O parâmetro bins controla quantas barras o histograma exibe — mais intervalos revelam detalhes mais finos, mas podem deixar o gráfico ruidoso. O parâmetro stat altera o que o eixo y representa: 'count' (padrão), 'density' (densidade de probabilidade), 'probability' (fração de observações) ou 'percent'. Escolher stat='density' torna comparáveis histogramas de conjuntos de dados com tamanhos diferentes.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
# Count histogram with 20 bins
sns.histplot(data=tips, x='total_bill', bins=20, ax=axes[0])
axes[0].set_title('Count (20 bins)')
# Density histogram
sns.histplot(data=tips, x='total_bill', stat='density', ax=axes[1])
axes[1].set_title('Density')
plt.tight_layout()
plt.show()Sobrepondo uma KDE ao Histograma
Definir kde=True em histplot sobrepõe ao histograma uma curva de estimativa de densidade por núcleo (KDE). A KDE é uma aproximação contínua e suave da distribuição de probabilidade subjacente. Essa combinação é muito eficaz: o histograma mostra as contagens brutas dos intervalos, enquanto a KDE revela o formato geral e detecta vários picos (multimodalidade).
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Histogram with KDE overlay
sns.histplot(data=tips, x='total_bill', kde=True, bins=25, color='steelblue')
plt.title('Bill Distribution with KDE Overlay')
plt.xlabel('Total Bill ($)')
plt.show()Usando kdeplot de Forma Independente
sns.kdeplot() desenha apenas a curva suave de densidade, sem barras de histograma. Isso é útil ao comparar várias distribuições nos mesmos eixos, pois histogramas sobrepostos ficam confusos, enquanto curvas KDE sobrepostas continuam legíveis. O parâmetro fill=True preenche a área sob a curva, facilitando a distinção visual entre os grupos.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# KDE plot for lunch vs dinner bills
sns.kdeplot(data=tips, x='total_bill', hue='time', fill=True, alpha=0.5)
plt.title('Bill Distribution: Lunch vs Dinner')
plt.xlabel('Total Bill ($)')
plt.show()O Parâmetro hue para Comparação entre Grupos
histplot e kdeplot aceitam um parâmetro hue que divide os dados por uma coluna categórica e desenha cada grupo com uma cor diferente. Isso facilita a comparação das distribuições entre grupos. Ao usar histplot com hue, defina stat='density' para tornar justa a comparação entre grupos de tamanhos diferentes.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Compare tip distributions by smoker status
sns.histplot(
data=tips,
x='tip',
hue='smoker',
stat='density',
common_norm=False,
bins=20,
alpha=0.6
)
plt.title('Tip Distribution by Smoker Status')
plt.show()Largura de Banda na KDE: o Parâmetro bw_adjust
A KDE tem um parâmetro de ajuste chamado largura de banda, que controla o grau de suavidade da curva. Uma largura de banda pequena torna a curva irregular e faz com que ela se ajuste excessivamente aos dados; uma largura grande suaviza demais a curva e oculta características reais. O Seaborn usa bw_adjust (padrão 1.0) como multiplicador da largura de banda escolhida automaticamente — valores abaixo de 1 aumentam a irregularidade, enquanto valores acima de 1 aumentam a suavidade.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
bw_values = [0.3, 1.0, 3.0]
for ax, bw in zip(axes, bw_values):
sns.kdeplot(data=tips, x='total_bill', bw_adjust=bw, ax=ax)
ax.set_title(f'bw_adjust={bw}')
plt.tight_layout()
plt.show()Distribuições 2D com histplot e kdeplot
histplot e kdeplot aceitam gráficos bidimensionais quando você passa os parâmetros x e y. Um histograma 2D mostra uma grade de frequências codificada por cores; uma KDE 2D mostra linhas de contorno de mesma densidade. Esses gráficos revelam a distribuição conjunta de duas variáveis numéricas e se elas estão correlacionadas.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 2D histogram
sns.histplot(data=tips, x='total_bill', y='tip', ax=axes[0])
axes[0].set_title('2D Histogram')
# 2D KDE contour plot
sns.kdeplot(data=tips, x='total_bill', y='tip', fill=True, ax=axes[1])
axes[1].set_title('2D KDE Contours')
plt.tight_layout()
plt.show()Personalizando a Aparência com Temas do Seaborn
O Seaborn oferece temas integrados por meio de sns.set_theme(style=). Os estilos disponíveis são 'darkgrid', 'whitegrid', 'dark', 'white' e 'ticks'. Você também pode definir uma paleta com palette= ou sns.set_palette(). Essas configurações se aplicam globalmente a todos os gráficos posteriores na sessão, facilitando a obtenção de uma aparência consistente.
import seaborn as sns
import matplotlib.pyplot as plt
# Apply a clean whitegrid theme
sns.set_theme(style='whitegrid', palette='muted')
tips = sns.load_dataset('tips')
sns.histplot(data=tips, x='total_bill', kde=True, bins=20)
plt.title('Styled Distribution Plot')
plt.show()
# Reset to defaults when done
sns.reset_defaults()Interpretando o Formato da Distribuição
Ao interpretar um gráfico de distribuição, procure quatro características principais. Centro: onde os dados se concentram (média/mediana)? Dispersão: qual é a largura da distribuição (desvio-padrão)? Assimetria: a cauda é mais longa à direita (assimetria positiva) ou à esquerda (assimetria negativa)? Modalidade: a distribuição tem um pico (unimodal) ou mais de um (bimodal/multimodal)? Distribuições bimodais geralmente indicam duas subpopulações ocultas que vale a pena separar.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Simulate a bimodal distribution
np.random.seed(42)
data = np.concatenate([
np.random.normal(loc=20, scale=3, size=300),
np.random.normal(loc=45, scale=5, size=200)
])
sns.histplot(data, kde=True, bins=40)
plt.title('Bimodal Distribution — Two Hidden Groups')
plt.xlabel('Value')
plt.show()displot: função de distribuição no nível da figura
sns.displot() é o invólucro no nível da figura que cria sua própria figura e permite dividir os dados em painéis por linhas e colunas usando os parâmetros col= e row=. Passe kind='hist', kind='kde' ou kind='ecdf' para alternar o tipo de gráfico. A ECDF (Função de Distribuição Acumulada Empírica) é especialmente útil porque mostra qual fração dos dados está abaixo de cada valor sem exigir a escolha de intervalos.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Faceted KDE by day of week
sns.displot(
data=tips,
x='total_bill',
col='day',
col_wrap=2,
kind='kde',
fill=True
)
plt.suptitle('Bill Distributions by Day', y=1.02)
plt.show()Verificação rápida
Teste sua compreensão dos gráficos de distribuição do Seaborn apresentados nesta lição.
Recapitulação da lição
Nesta lição, você aprendeu que: sns.histplot cria histogramas com intervalos e parâmetros estatísticos personalizáveis, sns.kdeplot desenha curvas de densidade suaves, ideais para comparar grupos, e o parâmetro hue divide os dois tipos de gráfico por uma variável categórica para permitir uma comparação lado a lado. A seguir, exploraremos gráficos de comparação categórica, como gráficos de caixa, gráficos de barras e gráficos de violino.
Perguntas Frequentes
A aula “Gráficos de distribuição: histplot e kdeplot” é grátis?
Sim — o texto completo de “Gráficos de distribuição: histplot e kdeplot” é 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 distribuição: histplot e kdeplot”?
Visualize o formato de uma distribuição numérica com sns.histplot e sobreponha uma estimativa de densidade de kernel com sns.kdeplot. 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 1 de 4.
Quanto tempo leva a aula “Gráficos de distribuição: histplot e kdeplot”?
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