seaborn
seaborn constrói gráficos estatísticos sobre matplotlib com APIs de dados tidy - ideal para análise exploratória rápida e padrões polidos.
Receita
Cartão de referência rápida - pronto para copiar e colar.
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
sns.set_theme(style="whitegrid", context="notebook")
df = pd.read_csv("sales.csv", parse_dates=["ordered_at"])
g = sns.relplot(data=df, x="ordered_at", y="revenue", hue="region", kind="line")
g.set_axis_labels("Data", "Receita ($)")
plt.close()Quando usar:
- EDA rápida em pandas DataFrames
- Comparações de grupos com intervalos de confiança
- Múltiplos pequenos facetados (
col,row) - KDE/hist/box/violin para distribuições
Exemplo de Trabalho
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
rng = np.random.default_rng(42)
df = pd.DataFrame(
{
"region": np.repeat(["East", "West"], 200),
"segment": np.tile(np.repeat(["SMB", "Enterprise"], 100), 2),
"revenue": rng.normal(150, 40, 400).clip(10),
}
)
sns.set_theme(style="ticks")
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
sns.histplot(data=df, x="revenue", hue="region", kde=True, ax=axes[0])
axes[0].set_title("Distribuição")
sns.boxplot(data=df, x="segment", y="revenue", hue="region", ax=axes[1])
axes[1].set_title("Por segmento")
sns.barplot(
data=df,
x="region",
y="revenue",
estimator="median",
errorbar=("pi", 50),
ax=axes[2],
)
axes[2].set_title("Mediana com intervalo")
sns.despine()
fig.tight_layout()
fig.savefig("eda.png", dpi=150, bbox_inches="tight")
plt.close(fig)O que isso demonstra:
- API
data=tidy em três tipos de gráfico histplotcom sobreposição KDE opcionalboxplotcomhuepara uma segunda categoria- Tupla
errorbarmoderna em vez dociobsoleto
Mergulho Profundo
Como Funciona
- seaborn mapeia colunas do DataFrame para papéis estéticos (x, y, hue, size, style).
- Funções estatísticas agregam internamente (média, mediana, IC de bootstrap).
- Funções de nível de figura (
relplot,catplot,displot) retornamFacetGrid. - Funções de nível de eixo (
scatterplot,barplot) aceitamax=para subplots.
Seletor de Gráficos
| Pergunta | Função |
|---|---|
| Tendência ao longo do tempo | lineplot / relplot(kind="line") |
| Comparação de categorias | barplot, boxplot, violinplot |
| Distribuição | histplot, kdeplot, ecdfplot |
| Relacionamento | scatterplot, regplot |
Notas de Python
import seaborn as sns
# Carrega conjunto de dados de exemplo para ensino
tips = sns.load_dataset("tips") # cache de CSV incluído
# Paleta acessível para leitores daltônicos
sns.set_palette("colorblind")Armadilhas
- Dados largos vs. tidy - seaborn espera uma linha por observação. Correção:
meltou corrigir o esquema upstream. - Parâmetro
ci=obsoleto - removido no seaborn 0.13+. Correção: usarerrorbar=("ci", 95)ouNone. plt.closeesquecido emrelplot- APIs de nível de figura criam novas figuras silenciosamente. Correção: capturar o valor de retorno e usarplt.close().- Gráfico de barras de médias em dados enviesados - a média esconde outliers. Correção: emparelhar com box/violin ou mostrar a mediana.
huecategórico enorme - legendas ilegíveis. Correção: filtro top-N ou facetar em vez de usarhue.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
pandas .plot | Gráficos rápidos mínimos | Precisa de padrões de IC estatísticos |
| Plotly express | Exploração interativa | Pipeline de impressão estática |
| Altair | Exportação declarativa Vega-Lite | Precisa de ajustes de pixel do matplotlib |
| matplotlib cru | Controle total do artista | Boilerplate estatístico repetitivo |
FAQs
O que são dados tidy para seaborn?
- Cada variável é uma coluna; cada observação é uma linha.
- Sem colunas separadas por região, a menos que se use
meltem formato largo.
Como faço facetar por duas variáveis?
sns.relplot(data=df, x="x", y="y", col="region", row="segment", kind="scatter")Como desligo as bandas de confiança?
sns.lineplot(data=df, x="t", y="v", errorbar=None)Posso passar um `ax` do matplotlib?
- Funções de nível de eixo aceitam
ax=. - Funções de nível de figura gerenciam sua própria figura.
Como salvar a saída do `relplot`?
g = sns.relplot(...)
g.savefig("out.png", dpi=150)Qual paleta devo usar?
colorblindouSet2para categorias.- Mapas de cores sequenciais (
viridis) para valores contínuos.
Como mostro uma regressão?
sns.regplot(data=df, x="ad_spend", y="revenue")seaborn funciona com Polars?
- Converta com
.to_pandas()para plotar, a menos que esteja usando caminhos nativos alternativos/plotly.
Como ordeno categorias?
order = df.groupby("region")["revenue"].median().sort_values().index
sns.barplot(data=df, x="region", y="revenue", order=order)Por que contagens diferentes em `barplot`?
- A altura da barra é o estimador (média/mediana), não a contagem bruta de linhas.
- Use
countplotpara contagens de linhas.
Relacionados
- matplotlib - personalização em nível de eixo
- Noções Básicas de Visualização - seleção de gráficos
- Plotly - acompanhamentos interativos
- Melhores Práticas de Visualização - escalas honestas
Versões do Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.