Density Plot

Density Plot

Categoría Distribución

Qué es

Curva suavizada que estima la función de densidad de probabilidad de una distribución. Es un histograma con suavizado (KDE - Kernel Density Estimation).

Para qué sirve

Para visualizar la distribución de datos continuos con una curva suave, o para comparar distribuciones entre pocos grupos superpuestos.

Cómo leerlo

Anatomía

La curva suave que dibuja este gráfico es una estimación de densidad kernel, formalizada de manera independiente por más de un investigador de estadística a mediados del siglo XX. La idea: centrar una pequeña curva suave (el "kernel", casi siempre una campana gaussiana) sobre cada dato individual, y sumar todas esas curvas para obtener una superficie continua, en vez de la superficie escalonada y dependiente del ancho de bin de un histograma. El ancho de banda de cada kernel —no su forma— es el parámetro que más cambia el resultado: muy angosto revela ruido falso, muy ancho esconde modas reales, el mismo dilema que el ancho de bin en un histograma.

Montículo de arena fina volcado y fotografiado de perfil, con una silueta de campana simétrica y suave sin ningún montaje: la misma forma que traza un density plot al estimar la distribución continua de los datos

Por qué funciona

Fundamento perceptivo

Las curvas superpuestas con transparencia son más fáciles de comparar que histogramas superpuestos. La forma continua facilita la lectura de la distribución.

Errores comunes

  • Curva más allá del rango real

    puede extenderse fuera de los datos reales (sobre todo en los bordes), y como el ancho de banda afecta la suavidad, documenta siempre el valor usado.

Dónde se usa

Contextos de aplicación

Distribución de alturas en una población
01

Distribución de alturas en una población

Una curva suave en vez de barras: la forma general de los datos.

Antes y después de una intervención
02

Antes y después de una intervención

Dos curvas superpuestas muestran si la distribución completa se movió.

Concentración de resultados de un examen
03

Concentración de resultados de un examen

Dónde se acumulan los puntajes y qué tan larga es cada cola.

Cómo construirlo

El mismo gráfico, en 11 librerías open source

Cada librería resuelve las mismas decisiones de diseño, como la escala, el espaciado entre barras o la inserción de la etiqueta de valor, de un modo distinto. Algunas las automatizan; otras las dejan explícitas en el código, a criterio de quien lo escribe. Comparar once implementaciones con los mismos datos y el mismo color de marca aísla esa diferencia, que de otro modo queda oculta detrás de estilos visuales distintos.

Matplotlib License (estilo BSD)
Matplotlib: gráfico de barras

Temperatura media diaria en tres ciudades chilenas, 2023 completo (misma fuente que el ejemplo real de la ficha: DGAC/DMC vía Portal de Datos Abiertos del Estado de Chile). Cada curva es una estimación de densidad (KDE) sobre los valores diarios de todo el año. Tres librerías Python (seaborn, plotnine, y matplotlib apoyada en scipy) calculan la densidad de forma nativa o casi nativa; Vega-Lite es la única con un transform "density" propio; las siete restantes usan la misma función kde() manual, un kernel gaussiano con ancho de banda de Silverman. Sin función kde nativa propia: se apoya en scipy.stats.gaussian_kde para calcular la densidad de cada ciudad.

import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde
import numpy as np

# Sin funcion kde nativa propia: se apoya en scipy.stats.gaussian_kde
# (parte del stack cientifico habitual, no una funcion manual como en
# D3/ECharts/Bokeh) para calcular la densidad de cada ciudad.
xs = np.linspace(-8, 28, 200)
for ciudad, valores, color in datos:
    densidad = gaussian_kde(valores)(xs)
    ax.fill_between(xs, densidad, color=color, alpha=0.32)
    ax.plot(xs, densidad, color=color, linewidth=2, label=ciudad)
plt.show()

Herramientas para construirlo

No-code, desktop y plataformas web, con su licencia visible, abierta o comercial.

No-code
Observable Freemium
JavaScript
D3.js Open SourceVega-Lite Open Source
Python
Plotly Open SourceMatplotlib Open SourceSeaborn Open SourceAltair Open Source
R
ggplot2 Open Source

Con datos reales

Ejemplos de uso.

Gráficos relacionados

Variantes y alternativas cercanas.