Seaborn es una librería de visualización estadística construida sobre Matplotlib y pensada para trabajar directamente con DataFrames de Pandas. Proporciona gráficos de alto nivel, estilos agradables por defecto y funciones que comprenden la semántica de los datos en Python.
Una capa superior sobre Matplotlib que facilita crear gráficos informativos y elegantes con menos código. Incluye gráficos estadísticos comunes (distribuciones, relaciones, categóricos, regresión, mapas de calor) y atajos para trabajar con grillas (facetas) y aplicar estilos coherentes.
displot
, catplot
, relplot
, heatmap
y pairplot
resuelven de una vez tareas que en Matplotlib requieren muchos pasos.hue
, style
, size
, col
y row
conectan columnas del DataFrame con la estética visual sin código extra.Matplotlib sigue siendo la base y ofrece control fino; Seaborn acelera la mayoría de los casos manteniendo la posibilidad de personalizar con Matplotlib cuando haga falta.
Actualizá a la versión más reciente mediante pip:
pip install --upgrade seaborn
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
print(sns.__version__)
Desde la versión 0.12, la forma recomendada es set_theme
:
sns.set_theme() # Tema estandar agradable y legible
# Opcional: elegir estilo y contexto desde el inicio
sns.set_theme(style="whitegrid", context="notebook")
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips") # DataFrame con datos de propinas
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", style="sex")
plt.title("Relacion total de la cuenta vs propina")
plt.show()
Las tres primeras filas del dataset tips
:
total_bill | tip | sex | smoker | day | time | size |
---|---|---|---|---|---|---|
16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
Las funciones de nivel figura (displot
, catplot
, relplot
, lmplot
) crean figuras completas y facetas automáticamente:
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.displot(data=tips, x="total_bill", hue="time", kind="kde", fill=True, col="sex")
plt.show()
Una gramática unificada para construir gráficos por capas:
import seaborn as sns
import seaborn.objects as so
tips = sns.load_dataset("tips")
(
so.Plot(tips, x="total_bill", y="tip", color="time")
.add(so.Dots(alpha=0.7))
.add(so.Line(), so.PolyFit(order=1)) # Recta de regresion
.theme(sns.plotting_context("notebook"))
).show()
Seaborn incluye estilos coherentes para fondos, rejillas y ticks:
darkgrid
(por defecto tradicional)whitegrid
(ideal para datos categóricos)dark
white
ticks
Aplicación:
sns.set_theme(style="whitegrid") # "darkgrid", "white", "dark" o "ticks"
Ajustan el tamaño de etiquetas, títulos y ticks según el uso:
paper
notebook
(default)talk
poster
sns.set_theme(context="talk") # Ideal para presentaciones
Elegí según el tipo de dato:
"deep"
, "muted"
, "bright"
, "pastel"
, "dark"
, "colorblind"
."rocket"
, "mako"
, "flare"
, "crest"
, "viridis"
, "magma"
, entre otras."vlag"
, "icefire"
, "coolwarm"
, "Spectral"
.Aplicación global o local:
# Global: todos los graficos siguientes
sns.set_palette("deep") # O cualquier nombre de paleta
# Local: solo para un grafico
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", palette="Set2")
Paletas continuas con cubehelix
y utilidades adicionales:
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
# Paleta continua personalizada (secuencial)
pal = sns.color_palette("mako", as_cmap=True)
sns.kdeplot(data=tips, x="total_bill", fill=True, cmap=pal)
plt.show()
# Paleta divergente para resaltar alrededor de un punto medio
sns.heatmap(tips.corr(numeric_only=True), cmap="vlag", center=0)
plt.show()
Podés seguir usando Matplotlib para títulos y etiquetas:
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.boxplot(data=tips, x="day", y="total_bill", hue="smoker", palette="pastel")
plt.title("Cuenta total por dia y habito de fumar")
plt.xlabel("Dia de la semana")
plt.ylabel("Total de la cuenta (USD)")
plt.legend(title="Fumador")
plt.show()
hue
, style
y size
para codificar variables adicionales sin saturar el gráfico.row
, col
) cuando comparar subgrupos mejore la lectura.pip install seaborn
import seaborn as sns; sns.set_theme(style="whitegrid", context="notebook")
df = sns.load_dataset("tips")
(u otro dataset propio)displot
, relplot
, catplot
, heatmap
o pairplot