Seaborn: visualización declarativa
Al finalizar este tema
Comprenderá las diferencias entre la sintaxis declarativa de Seaborn y la de matplotlib, y podrá generar diagramas de caja, diagramas de recuento y mapas de calor con una sola línea de código.
Cuando matplotlib se vuelve engorroso
Para generar un gráfico de la "distribución salarial por departamento" con matplotlib, el código sería el siguiente:
import matplotlib.pyplot as pltimport numpy as np
departments = df['department'].unique()positions = range(len(departments))
fig, ax = plt.subplots()for i, dept in enumerate(departments): salaries = df[df['department'] == dept]['salary'] ax.boxplot(salaries, positions=[i], widths=0.6)
ax.set_xticks(positions)ax.set_xticklabels(departments)ax.set_ylabel('salario')ax.set_title('Distribución salarial por departamento')plt.show()Itera sobre los datos para separarlos, calcular las posiciones y asignar las etiquetas directamente. El mismo gráfico con Seaborn:
import seaborn as sns
sns.boxplot(data=df, x='department', y='salary')plt.show()Son dos líneas. Solo indica "qué mostrar" y Seaborn se encarga del resto. Esta es la sintaxis declarativa.
Imperativo vs. Declarativo
| matplotlib (imperativo) | Seaborn (declarativo) | |
|---|---|---|
| Perspectiva | Instrucciones paso a paso de "cómo graficar" | Declaración de "qué mostrar" |
| Separación de datos | Bucles/filtrado manual | Automático (x, y, hue) |
| Color/leyenda | Especificación manual | Generación automática |
| Personalización | Muy detallada | Mayormente automática; los detalles se ajustan con matplotlib |
Seaborn es una biblioteca construida sobre matplotlib. Crea gráficos visualmente atractivos rápidamente con la configuración predeterminada y, cuando se requiere un ajuste fino, se utiliza matplotlib.
Los 5 gráficos clave
1. Distribución — histplot
sns.histplot(data=df, x='salary', bins=20, kde=True)Al agregar kde=True, las curvas de estimación de densidad (suaves) se superponen en el gráfico.
2. Distribución por categoría — diagrama de caja
sns.boxplot(data=df, x='department', y='salary')Visualiza la mediana, los cuartiles y los valores atípicos de forma rápida. Es especialmente útil para comparar las diferencias salariales entre departamentos.
3. Conteo — countplot
sns.countplot(data=df, x='department', hue='gender')Muestra la frecuencia de cada categoría mediante barras. Si se añaden subcategorías, como el género, con hue, se mostrarán diferenciadas por color.
4. Relación — gráfico de dispersión
sns.scatterplot(data=df, x='experience', y='salary', hue='department')Representa la relación entre dos variables numéricas mediante puntos. Permite visualizar fácilmente si existe una relación proporcional entre los años de experiencia y el salario.
5. Correlación — mapa de calor
corr = df[['salary', 'experience', 'age']].corr()sns.heatmap(corr, annot=True, cmap='coolwarm', vmin=-1, vmax=1)Utilice annot=True para mostrar los valores numéricos y cmap para especificar la paleta de colores. Las correlaciones positivas (rojo) y negativas (azul) se diferencian mediante el color.
hue: tercera variable
Esta es la función más potente de Seaborn:
# Sin hue — gráfico de dispersión totalsns.scatterplot(data=df, x='experience', y='salary')
# Con hue — separación de color por departamentosns.scatterplot(data=df, x='experience', y='salary', hue='department')hue codifica la tercera variable mediante el color. Para lograr esto con matplotlib, es necesario recorrer un bucle y asignar los colores de forma explícita. Con Seaborn, basta con una sola palabra.
Configuración del estilo
# Cambiar estilo completosns.set_theme(style='whitegrid')
# Cambiar paletasns.set_palette('Set2')
# En un gráfico individualsns.boxplot(data=df, x='dept', y='salary', palette='pastel')Opciones de estilo:
darkgrid— Valor predeterminado: fondo gris con cuadrículawhitegrid— Fondo blanco con cuadrículadark— Fondo gris sin cuadrículawhite— Fondo blanco minimalistaticks— Solo marcas en los ejes
Combinación de Seaborn y matplotlib
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
sns.boxplot(data=df, x='dept', y='salary', ax=axes[0])axes[0].set_title('Salario por departamento')
sns.histplot(data=df, x='salary', bins=20, ax=axes[1])axes[1].set_title('Distribución salarial general')
plt.tight_layout()plt.show()ax Se pueden insertar gráficos de Seaborn en los ejes de matplotlib mediante parámetros. La práctica común es usar matplotlib para el diseño y Seaborn para el contenido del gráfico.
Aspectos clave
Seaborn es una biblioteca de visualización que dibuja automáticamente lo que se especifica, es decir, "qué mostrar".
hueCodificar una tercera variable mediante el color con una sola palabra: esta es la principal ventaja de Seaborn. Para una exploración rápida, use Seaborn; para ajustes finos, use matplotlib. Es fundamental saber cómo usar ambas herramientas.