Configuración global con set_theme()
La función set_theme() es el punto de partida recomendado para configurar la apariencia visual de los gráficos en Seaborn. Cuando se llama, modifica los parámetros globales de Matplotlib (rcParams) de manera que todos los gráficos posteriores adopten el tema especificado.
import seaborn as sns
import matplotlib.pyplot as plt
# Configurar tema con estilo, contexto y paleta en una sola llamada
sns.set_theme(style="whitegrid", context="notebook", palette="deep")
tips = sns.load_dataset("tips")
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
plt.title("Gráfico con tema whitegrid")
plt.show()
Llamar a sns.set_theme() sin argumentos aplica los valores por defecto de Seaborn, que ya mejoran considerablemente el aspecto visual respecto a Matplotlib sin configurar.
Para restaurar el estilo predeterminado de Matplotlib (sin modificaciones de Seaborn), se puede usar:
# Restaurar estilos predeterminados de Matplotlib
sns.reset_defaults()
# O alternativamente:
sns.reset_orig()
Los cinco estilos predefinidos
Seaborn ofrece cinco estilos predefinidos que controlan el fondo, las líneas de la cuadrícula y los bordes del gráfico:
estilos = ["whitegrid", "darkgrid", "white", "dark", "ticks"]
fig, axes = plt.subplots(1, 5, figsize=(20, 4), sharey=True)
for ax, estilo in zip(axes, estilos):
with sns.axes_style(estilo): # gestión de contexto temporal
sns.boxplot(
data=tips,
x="day",
y="total_bill",
ax=ax,
palette="muted",
order=["Thur", "Fri", "Sat", "Sun"]
)
ax.set_title(f"'{estilo}'", fontsize=11)
ax.set_xlabel("")
if ax != axes[0]:
ax.set_ylabel("")
fig.suptitle("Los cinco estilos de Seaborn", fontsize=14, fontweight="bold")
plt.tight_layout()
plt.show()
Descripción de cada estilo:
whitegrid: fondo blanco con líneas de cuadrícula grises. Ideal para publicaciones y documentos.darkgrid: fondo gris oscuro con líneas de cuadrícula. Buen contraste para pantallas.white: fondo blanco limpio sin cuadrícula. Minimalista y elegante.dark: fondo gris oscuro sin cuadrícula. Para presentaciones en pantalla.ticks: fondo blanco con marcas en los ejes pero sin cuadrícula. Similar al estilo de publicaciones científicas.
Contextos de escala con set_context()
El contexto controla el tamaño relativo de los elementos del gráfico (fuentes, líneas, marcadores) en función del medio de presentación. Los cuatro contextos disponibles son:
contextos = ["paper", "notebook", "talk", "poster"]
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
for ax, contexto in zip(axes.flatten(), contextos):
with sns.plotting_context(contexto):
sns.lineplot(
data=sns.load_dataset("fmri"),
x="timepoint",
y="signal",
hue="region",
ax=ax,
errorbar=("ci", 95)
)
ax.set_title(f"Contexto: '{contexto}'")
plt.suptitle("Comparativa de contextos de escala", fontsize=14)
plt.tight_layout()
plt.show()
paper: elementos pequeños, optimizado para gráficos que se reducirán al imprimirse.notebook: tamaño predeterminado, equilibrado para Jupyter Notebook.talk: elementos más grandes, adecuado para presentaciones con diapositivas.poster: elementos muy grandes, diseñado para posters científicos o pantallas grandes.
También es posible ajustar el factor de escala manualmente:
# Aumentar el tamaño de todos los elementos al 1.5x del contexto notebook
sns.set_context("notebook", font_scale=1.5)
Paletas de colores con set_palette()
La paleta de colores controla cómo se asignan los colores a las categorías. Seaborn incluye sus propias paletas cualitativas optimizadas para la diferenciación visual:
paletas = ["deep", "muted", "pastel", "bright", "dark", "colorblind"]
fig, axes = plt.subplots(2, 3, figsize=(15, 8))
for ax, paleta in zip(axes.flatten(), paletas):
sns.set_palette(paleta)
sns.barplot(
data=tips,
x="day",
y="total_bill",
hue="sex",
order=["Thur", "Fri", "Sat", "Sun"],
ax=ax,
errorbar=None
)
ax.set_title(f"Paleta '{paleta}'")
ax.set_xlabel("")
ax.set_ylabel("")
ax.legend(title="Sexo", fontsize=8)
plt.suptitle("Paletas cualitativas de Seaborn", fontsize=14)
plt.tight_layout()
plt.show()
# Restaurar paleta predeterminada
sns.set_palette("deep")
Para visualizar previamente una paleta antes de aplicarla:
# Visualizar una paleta con sns.palplot
plt.figure(figsize=(10, 1.5))
sns.palplot(sns.color_palette("colorblind", 8))
plt.title("Paleta 'colorblind' con 8 colores")
plt.show()
Gestores de contexto temporales
Una característica muy útil es la posibilidad de aplicar estilos, contextos y paletas temporalmente usando gestores de contexto (with statements). Esto evita contaminar la configuración global cuando solo se necesita un estilo específico para un único gráfico:
sns.set_theme(style="whitegrid") # estilo global predeterminado
# Este gráfico usa el estilo global
sns.histplot(data=tips, x="total_bill")
plt.title("Estilo global: whitegrid")
plt.show()
# Este gráfico usa temporalmente el estilo darkgrid
with sns.axes_style("darkgrid"):
sns.histplot(data=tips, x="tip")
plt.title("Estilo temporal: darkgrid")
plt.show()
# El siguiente gráfico vuelve al estilo global whitegrid
sns.histplot(data=tips, x="size")
plt.title("De vuelta al estilo global: whitegrid")
plt.show()
De manera similar para el contexto:
with sns.plotting_context("talk", font_scale=1.2):
sns.boxplot(data=tips, x="day", y="total_bill")
plt.title("Contexto temporal: talk")
plt.show()
Personalización de parámetros específicos con rc
Tanto set_style() como set_context() aceptan un parámetro rc para sobreescribir parámetros específicos de rcParams manteniendo el resto del estilo intacto:
# Personalizar solo ciertos parámetros dentro de un estilo
sns.set_style("whitegrid", {
"grid.color": ".9",
"grid.linestyle": "--",
"axes.facecolor": "#f8f9fa",
"font.family": "sans-serif"
})
sns.violinplot(data=tips, x="day", y="total_bill", palette="Set2",
order=["Thur", "Fri", "Sat", "Sun"])
plt.title("Whitegrid con parámetros personalizados")
plt.show()
# Restaurar estilo estándar
sns.set_theme()
Eliminar bordes con despine()
La función despine() elimina los bordes del gráfico para crear un aspecto más limpio y moderno, especialmente útil con los estilos white y ticks:
sns.set_style("ticks")
ax = sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", palette="Set2")
sns.despine() # elimina los bordes superior y derecho por defecto
plt.title("Gráfico con despine()")
plt.show()
# Eliminar también los bordes izquierdo e inferior
sns.despine(left=True, bottom=True)
Flujo de trabajo recomendado
Para mantener una configuración visual coherente en todo un proyecto de análisis:
import seaborn as sns
import matplotlib.pyplot as plt
# Al inicio del notebook o script: configuración global del proyecto
sns.set_theme(
style="whitegrid",
context="notebook",
palette="colorblind",
font_scale=1.1,
rc={"figure.figsize": (10, 6)}
)
# Todos los gráficos siguientes heredarán esta configuración
# sin necesidad de repetirla en cada llamada
Esta práctica garantiza que todos los gráficos del análisis tengan un aspecto coherente y profesional, y facilita cambiar el estilo de todo el proyecto modificando solo un bloque de configuración inicial.
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Seaborn es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de Seaborn
Explora más contenido relacionado con Seaborn y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
Usar set_theme() para configurar el aspecto global de todos los gráficos. Aplicar los cinco estilos predefinidos de Seaborn (whitegrid, darkgrid, white, dark, ticks). Ajustar el contexto de escala con set_context para distintos medios de presentación. Seleccionar y aplicar paletas de colores con set_palette. Usar axes_style() y plotting_context() como gestores de contexto temporales.