Voronoi Diagram

Voronoi Diagram

Categoría Distribución

Qué es

Partición del plano en regiones donde cada región contiene todos los puntos más cercanos a un nodo semilla que a cualquier otro. Crea teselas orgánicas.

Para qué sirve

Para visualizar zonas de influencia, áreas de cobertura o proximidad espacial. También usado para enriquecer scatter plots añadiendo regiones de influencia.

Cómo leerlo

Anatomía

La definición es exacta, no aproximada: dado un conjunto de puntos semilla, cada celda es la región del plano formada por todos los puntos más cercanos a esa semilla que a cualquier otra semilla del conjunto. El límite entre dos celdas vecinas —la arista— es, por construcción geométrica, la mediatriz (bisectriz perpendicular) del segmento que une sus dos semillas: todo punto sobre esa línea está exactamente a la misma distancia de ambas, razón por la cual las celdas nunca se superponen ni dejan huecos entre sí. El diagrama completo es el dual geométrico de una triangulación construida sobre el mismo conjunto de puntos: dos estructuras que se derivan matemáticamente una de la otra, y donde una arista existe en una si y solo si las dos celdas correspondientes son vecinas en la otra. La técnica aparece en campos muy distintos entre sí —interpolación de lluvia entre estaciones meteorológicas, análisis de proximidad urbana, biología celular— precisamente porque la pregunta que resuelve, "qué punto está más cerca de aquí", es universal.

Barro seco agrietado en celdas poligonales irregulares que se tocan en uniones de tres, sin espacios entre ellas: la misma teselación que define un diagrama de Voronoi

Por qué funciona

Fundamento perceptivo

Convierte puntos en áreas, lo que hace que la proximidad espacial sea inmediatamente legible. El área de cada región es inversamente proporcional a la densidad de puntos.

Errores comunes

  • Requiere familiaridad previa

    es difícil de leer sin conocer el concepto, así que añade siempre los puntos semilla y una explicación de qué representa cada región.

Dónde se usa

Contextos de aplicación

Zonas de cobertura de servicios
01

Zonas de cobertura de servicios

Cada punto de atención domina la región más cercana a él.

Regiones de influencia de ciudades
02

Regiones de influencia de ciudades

El territorio dividido según qué ciudad queda más cerca.

Análisis de proximidad de instalaciones
03

Análisis de proximidad de instalaciones

Detectar zonas mal cubiertas mirando el tamaño de cada celda.

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.

Qué capital regional queda más cerca, en cualquier punto de Chile

Fuente: Coordenadas geográficas aproximadas de capitales regionales (esquema simplificado)

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

Territorio más cercano a cada una de 9 capitales regionales de Chile, en un esquema simplificado norte-sur (no una proyección cartográfica exacta): cada celda es el área cuyos puntos están más cerca de esa ciudad que de cualquier otra, la aplicación clásica de un diagrama de Voronoi. d3-delaunay calcula el teselado directo desde las coordenadas (se instaló como dependencia real para esta ficha); scipy.spatial.Voronoi hace el cálculo equivalente en Python, pero sin recortar las celdas a los bordes del lienzo; las demás librerías reutilizan los polígonos ya resueltos y recortados. scipy.spatial.Voronoi SÍ es una función nativa de cálculo, pero no recorta las celdas a los bordes del lienzo —matplotlib solo dibuja los Polygon resultantes.

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from scipy.spatial import Voronoi

# scipy.spatial.Voronoi SÍ es una función nativa de cálculo (no de
# dibujo): calcula el teselado igual que d3-delaunay, pero devuelve
# vértices y regiones crudos, sin recorte a los bordes del lienzo --
# matplotlib solo dibuja los Polygon resultantes.
for i, celda in enumerate(celdas):
    ax.add_patch(mpatches.Polygon(celda["verts"], facecolor=colores[i], alpha=0.72, edgecolor="white"))
plt.show()

No disponible en estas librerías

ApexCharts

No tiene un tipo Voronoi nativo, no soporta paths SVG/Path2D crudos, y no expone una API de bajo nivel para rellenar polígonos arbitrarios a mano.

Vega-Lite

No tiene un mark Voronoi ni una forma directa de rellenar un polígono arbitrario de vértices —esa capacidad existe en Vega (la librería completa), no en Vega-Lite.

Herramientas para construirlo

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

No-code
Observable Freemium
JavaScript
D3.js Open Source
Python
Plotly Open SourceMatplotlib Open SourceScipy Open Source

Gráficos relacionados

Variantes y alternativas cercanas.