Seaborn trae buenos defaults, pero para producir gráficos profesionales vas a querer controlar paletas de color, estilos y tamaños/tipografías, además de títulos y etiquetas.
A continuación, una guía práctica con ejemplos listos para copiar y pegar (Seaborn ≥ 0.12/0.13).
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid", context="notebook")
tips = sns.load_dataset("tips")
# Paleta cualitativa “colorblind” (accesible)
sns.set_palette("colorblind") # global para gráficos siguientes
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day")
plt.title("Paleta cualitativa (colorblind) para categorías")
plt.show()
Secuenciales: de claro → oscuro para valores bajos→altos ("mako", "rocket", "crest", "viridis", …)
Divergentes: resaltar desvíos alrededor de un centro (p. ej. 0) ("vlag", "icefire", "coolwarm", "Spectral")
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid")
titanic = sns.load_dataset("titanic")
# Heatmap de correlación (divergente centrada en 0)
corr = titanic.corr(numeric_only=True)
sns.heatmap(corr, cmap="vlag", center=0, annot=True, fmt=".2f")
plt.title("Matriz de correlación con paleta divergente (centrada en 0)")
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")
# Crear paleta desde una lista (hex o nombres CSS)
mi_paleta = sns.color_palette(["#1f77b4", "#ff7f0e", "#2ca02c", "#9467bd"])
sns.set_palette(mi_paleta)
sns.barplot(data=tips, x="day", y="total_bill", hue="sex")
plt.title("Paleta personalizada (lista de colores)")
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")
cmap = sns.color_palette("mako", as_cmap=True)
sns.kdeplot(data=tips, x="total_bill", fill=True, cmap=cmap)
plt.title("Colormap continuo (mako) para densidad")
plt.show()
set_theme
es la forma moderna y global de configurar Seaborn. Aun así, podés ajustar estilo y contexto según el uso.
import seaborn as sns
import matplotlib.pyplot as plt
# Tema global + estilo específico
sns.set_theme(style="whitegrid", context="notebook")
fmri = sns.load_dataset("fmri")
sns.lineplot(data=fmri, x="timepoint", y="signal", hue="event")
plt.title("Estilo whitegrid con context notebook")
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid", context="talk") # más grande (presentaciones)
tips = sns.load_dataset("tips")
sns.boxplot(data=tips, x="day", y="total_bill")
plt.title("Context 'talk': títulos/etiquetas más grandes")
plt.show()
Útil para un gráfico sin afectar el resto.
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid", context="notebook")
tips = sns.load_dataset("tips")
with sns.axes_style("white"):
sns.violinplot(data=tips, x="day", y="total_bill", inner="quartile")
plt.title("Estilo local: 'white' solo en este gráfico")
plt.show()
Aunque Seaborn configura defaults, el control fino se hace con Matplotlib.
import seaborn as sns
import matplotlib.pyplot as plt
# Tamaño base de fuente
plt.rcParams["font.size"] = 11
# Tamaño de figura por defecto
plt.rcParams["figure.figsize"] = (7, 4)
sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
plt.title("Control de tamaño con rcParams", fontsize=14, weight="bold")
plt.xlabel("Total de la cuenta (USD)", fontsize=12)
plt.ylabel("Propina (USD)", fontsize=12)
plt.legend(title="Momento del día", frameon=True)
plt.tight_layout()
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")
fig, ax = plt.subplots(figsize=(6, 4)) # tamaño solo para esta figura
sns.regplot(data=tips, x="total_bill", y="tip", ax=ax, scatter_kws={"alpha": .7, "s": 45})
ax.set_title("Figura con tamaño personalizado", fontsize=13, pad=8)
ax.set_xlabel("Total bill (USD)", fontsize=11)
ax.set_ylabel("Tip (USD)", fontsize=11)
ax.legend_.remove() if ax.legend_ else None # ejemplo: ocultar leyenda si no aporta
plt.show()
Cuando usás funciones “nivel figura” como relplot, catplot, lmplot, tenés un objeto FacetGrid o FigureGrid.
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid", context="notebook")
fmri = sns.load_dataset("fmri")
g = sns.relplot(
data=fmri, kind="line",
x="timepoint", y="signal",
hue="event", col="region", height=3, aspect=1.1
)
g.set_axis_labels("Tiempo", "Señal")
g.set_titles("{col_name}") # título sobre cada subgráfico
g.figure.suptitle("Evolución de la señal por región y evento", y=1.03, fontsize=14, weight="bold")
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")
ax = sns.barplot(data=tips, x="day", y="tip", estimator=sum, errorbar=None)
ax.set_title("Propinas totales por día")
ax.set_xlabel("Día")
ax.set_ylabel("Propinas (USD)")
# Rotar etiquetas del eje X si se solapan
for label in ax.get_xticklabels():
label.set_rotation(0)
# Formato de eje Y (por ejemplo, dólares enteros)
ax.yaxis.set_major_formatter(mtick.StrMethodFormatter("${x:,.0f}"))
plt.tight_layout()
plt.show()
sns.set_palette(...)
para aplicar globalmente.sns.color_palette(..., as_cmap=True)
para colormaps continuos.sns.set_theme(style=..., context=...)
como configuración base.sns.axes_style
/ sns.plotting_context
.plt.rcParams
.figsize
, fontsize
, pad
, rotación de ticks.FacetGrid.set_titles
, figure.suptitle
, set_axis_labels
.Con estas herramientas tenés control fino y profesional de la estética en Seaborn, manteniendo la productividad de su API de alto nivel