Gráficos de distribución: histplot y kdeplot
Visualice la forma de una distribución numérica con sns.histplot y superponga una estimación de densidad de núcleo con sns.kdeplot.
Gráficos de distribución: histplot y kdeplot es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
Seaborn y los gráficos de distribución
Seaborn es una biblioteca de visualización de datos estadísticos construida sobre Matplotlib. Proporciona una API de alto nivel que permite crear gráficos atractivos e informativos con muy poco código. Una de las primeras cosas que querrá comprender sobre cualquier conjunto de datos es la forma de sus distribuciones, y histplot y kdeplot de Seaborn son las herramientas principales para ello.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# Load a built-in dataset
tips = sns.load_dataset('tips')
print(tips.head())Crear un histograma básico con histplot
sns.histplot(data, x='column') crea un histograma de una variable numérica. De forma predeterminada, Seaborn elige automáticamente un número adecuado de intervalos mediante la regla de Sturges. Puede personalizar el número de intervalos con el parámetro bins o dejar que Seaborn lo elija automáticamente. La altura de cada barra representa el recuento de observaciones en ese intervalo.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Basic histogram of total bill amounts
sns.histplot(data=tips, x='total_bill')
plt.title('Distribution of Total Bill')
plt.xlabel('Total Bill ($)')
plt.show()Controlar los intervalos y el parámetro stat
El parámetro bins controla cuántas barras muestra el histograma: un número mayor de intervalos revela más detalles, pero puede producir un aspecto ruidoso. El parámetro stat cambia lo que representa el eje y: 'count' (predeterminado), 'density' (densidad de probabilidad), 'probability' (fracción de observaciones) o 'percent'. Elegir stat='density' permite comparar histogramas de conjuntos de datos de distinto tamaño.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
# Count histogram with 20 bins
sns.histplot(data=tips, x='total_bill', bins=20, ax=axes[0])
axes[0].set_title('Count (20 bins)')
# Density histogram
sns.histplot(data=tips, x='total_bill', stat='density', ax=axes[1])
axes[1].set_title('Density')
plt.tight_layout()
plt.show()Superponer una KDE al histograma
Establecer kde=True en histplot superpone al histograma una curva de estimación de densidad por kernel (KDE). La KDE es una aproximación continua y suavizada de la distribución de probabilidad subyacente. Esta combinación resulta muy eficaz: el histograma muestra los recuentos sin procesar de los intervalos, mientras que la KDE revela la forma general y detecta varios máximos (multimodalidad).
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Histogram with KDE overlay
sns.histplot(data=tips, x='total_bill', kde=True, bins=25, color='steelblue')
plt.title('Bill Distribution with KDE Overlay')
plt.xlabel('Total Bill ($)')
plt.show()Usar kdeplot de forma independiente
sns.kdeplot() dibuja únicamente la curva de densidad suavizada, sin barras de histograma. Resulta útil para comparar varias distribuciones en los mismos ejes, ya que los histogramas superpuestos pueden resultar confusos, mientras que las curvas KDE superpuestas siguen siendo legibles. El parámetro fill=True sombrea el área situada bajo la curva, lo que facilita distinguir visualmente los grupos.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# KDE plot for lunch vs dinner bills
sns.kdeplot(data=tips, x='total_bill', hue='time', fill=True, alpha=0.5)
plt.title('Bill Distribution: Lunch vs Dinner')
plt.xlabel('Total Bill ($)')
plt.show()El parámetro hue para comparar grupos
Tanto histplot como kdeplot aceptan un parámetro hue que divide los datos según una columna categórica y dibuja cada grupo con un color diferente. Esto facilita la comparación de distribuciones entre grupos. Al usar histplot con hue, establezca stat='density' para comparar de forma justa grupos de distinto tamaño.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Compare tip distributions by smoker status
sns.histplot(
data=tips,
x='tip',
hue='smoker',
stat='density',
common_norm=False,
bins=20,
alpha=0.6
)
plt.title('Tip Distribution by Smoker Status')
plt.show()Ancho de banda en KDE: el parámetro bw_adjust
La KDE tiene un parámetro de ajuste llamado ancho de banda que controla el grado de suavizado de la curva. Un ancho de banda pequeño produce una curva irregular y demasiado ajustada a los datos; uno grande la suaviza en exceso y oculta características reales. Seaborn usa bw_adjust (1.0 de forma predeterminada) como multiplicador del ancho de banda elegido automáticamente: los valores inferiores a 1 aumentan la irregularidad y los superiores a 1 aumentan el suavizado.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
bw_values = [0.3, 1.0, 3.0]
for ax, bw in zip(axes, bw_values):
sns.kdeplot(data=tips, x='total_bill', bw_adjust=bw, ax=ax)
ax.set_title(f'bw_adjust={bw}')
plt.tight_layout()
plt.show()Distribuciones 2D con histplot y kdeplot
Tanto histplot como kdeplot admiten gráficos bidimensionales si se pasan los parámetros x y y. Un histograma 2D muestra una cuadrícula de frecuencias codificada por colores; una KDE 2D muestra líneas de contorno de igual densidad. Estos gráficos revelan la distribución conjunta de dos variables numéricas y permiten observar si están correlacionadas.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 2D histogram
sns.histplot(data=tips, x='total_bill', y='tip', ax=axes[0])
axes[0].set_title('2D Histogram')
# 2D KDE contour plot
sns.kdeplot(data=tips, x='total_bill', y='tip', fill=True, ax=axes[1])
axes[1].set_title('2D KDE Contours')
plt.tight_layout()
plt.show()Personalizar el aspecto con temas de Seaborn
Seaborn proporciona temas integrados mediante sns.set_theme(style=). Los estilos disponibles son 'darkgrid', 'whitegrid', 'dark', 'white' y 'ticks'. También puede establecer una paleta con palette= o sns.set_palette(). Estos ajustes se aplican globalmente a todos los gráficos posteriores de la sesión, lo que facilita conseguir un aspecto coherente.
import seaborn as sns
import matplotlib.pyplot as plt
# Apply a clean whitegrid theme
sns.set_theme(style='whitegrid', palette='muted')
tips = sns.load_dataset('tips')
sns.histplot(data=tips, x='total_bill', kde=True, bins=20)
plt.title('Styled Distribution Plot')
plt.show()
# Reset to defaults when done
sns.reset_defaults()Interpretar la forma de una distribución
Al leer un gráfico de distribución, busque cuatro características clave. Centro: ¿dónde se concentra la masa (media/mediana)? Dispersión: ¿qué amplitud tiene la distribución (desviación estándar)? Asimetría: ¿es más larga la cola derecha (asimetría positiva) o la izquierda (asimetría negativa)? Modalidad: ¿tiene la distribución un máximo (unimodal) o varios (bimodal/multimodal)? Las distribuciones bimodales suelen indicar la existencia de dos subpoblaciones ocultas que conviene separar.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Simulate a bimodal distribution
np.random.seed(42)
data = np.concatenate([
np.random.normal(loc=20, scale=3, size=300),
np.random.normal(loc=45, scale=5, size=200)
])
sns.histplot(data, kde=True, bins=40)
plt.title('Bimodal Distribution — Two Hidden Groups')
plt.xlabel('Value')
plt.show()displot: función de distribución a nivel de figura
sns.displot() es el contenedor de nivel de figura que crea su propia Figure y admite facetas en filas y columnas mediante los parámetros col= y row=. Pase kind='hist', kind='kde' o kind='ecdf' para cambiar el tipo de gráfico. La ECDF (función de distribución acumulada empírica) resulta especialmente útil porque muestra qué fracción de los datos se encuentra por debajo de cada valor sin tener que elegir intervalos.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Faceted KDE by day of week
sns.displot(
data=tips,
x='total_bill',
col='day',
col_wrap=2,
kind='kde',
fill=True
)
plt.suptitle('Bill Distributions by Day', y=1.02)
plt.show()Comprobación rápida
Compruebe su comprensión de los gráficos de distribución de Seaborn de esta lección.
Resumen de la lección
En esta lección ha aprendido lo siguiente: sns.histplot crea histogramas con intervalos y parámetros estadísticos personalizables, sns.kdeplot dibuja curvas de densidad suaves, ideales para comparar grupos, y el parámetro hue divide ambos tipos de gráficos según una variable categórica para facilitar la comparación lado a lado. A continuación exploraremos gráficos de comparación categórica, como diagramas de caja, gráficos de barras y diagramas de violín.
Preguntas frecuentes
¿La lección «Gráficos de distribución: histplot y kdeplot» es gratis?
Sí — el texto completo de «Gráficos de distribución: histplot y kdeplot» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Gráficos de distribución: histplot y kdeplot»?
Visualice la forma de una distribución numérica con sns.histplot y superponga una estimación de densidad de núcleo con sns.kdeplot. Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Pandas & NumPy Academy?
No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Gráficos de distribución: histplot y kdeplot»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?
Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Gráficos de distribución: histplot y kdeplot
- Gráficos categóricos: boxplot, barplot y violinplot
- Gráficos de dispersión y pair plots
- Mapas de calor para matrices de correlación