Diagrama de Voronoi en ggplot2 con ggvoronoi

Librería

ggvoronoi

Autor principal

Robert C. Garrett

Datos de muestra

El siguiente conjunto de datos contiene tres columnas donde la primera son los valores de la variable del eje X, la segunda los del eje Y y la tercera la distancia euclídea entre los puntos y el centro del gráfico, que se corresponde con el punto (200, 200).

# Datos
set.seed(1)
x <- sample(1:400, size = 100)
y <- sample(1:400, size = 100)
dist <- sqrt((x - 200) ^ 2 + (y - 200) ^ 2)

df <- data.frame(x, y, dist = dist)

Diagrama de Voronoi con stat_voronoi

La función stat_voronoi se puede utilizar para crear un diagrama de Voronoi, pasando las variables x e y a la función aes y usando stat_voronoi(geom = "path").

# install.packages("ggvoronoi")
# install.packages("ggplot2")
library(ggvoronoi)
library(ggplot2)

ggplot(df, aes(x, y)) +
  stat_voronoi(geom = "path")

Diagrama de Voronoi con ggvoronoi

Observaciones

También puedes agregar las observaciones haciendo uso de geom_point.

# install.packages("ggvoronoi")
# install.packages("ggplot2")
library(ggvoronoi)
library(ggplot2)

ggplot(df, aes(x, y)) +
  stat_voronoi(geom = "path") +
  geom_point()

Diagrama de Voronoi en R

Personalización de las líneas

Ten en cuenta que puedes cambiar el estilo de las líneas con los argumentos color, lwd y linetype.

# install.packages("ggvoronoi")
# install.packages("ggplot2")
library(ggvoronoi)
library(ggplot2)

ggplot(df, aes(x, y)) +
  stat_voronoi(geom = "path",
               color = 4,      # Color de las líneas
               lwd = 0.7,      # Grosor de las líneas
               linetype = 1) + # Tipo de líneas
  geom_point()

Diagrama de Voronoi en ggplot2

Mapa de calor con Voronoi

Voronoi mapa de calor en ggplot2

Puedes pasar una variable al argumento fill de la función aes para crear un mapa de calor de Voronoi. Para este propósito tendrás que utilizar la función geom_voronoi.

# install.packages("ggvoronoi")
# install.packages("ggplot2")
library(ggvoronoi)
library(ggplot2)

ggplot(df, aes(x, y, fill = dist)) +
  geom_voronoi() +
  geom_point()

Voronoi paleta de colores

El camino (las líneas) del diagrama se puede agregar añadiendo stat_voronoi(geom = "path").

# install.packages("ggvoronoi")
# install.packages("ggplot2")
library(ggvoronoi)
library(ggplot2)

ggplot(df, aes(x, y, fill = dist)) +
  geom_voronoi() +
  stat_voronoi(geom = "path") +
  geom_point()

Voronoi con color transparente usando ggvoronoi

La transparencia del color se puede establecer con el argumento alpha de la función geom_voronoi.

# install.packages("ggvoronoi")
# install.packages("ggplot2")
library(ggvoronoi)
library(ggplot2)

ggplot(df, aes(x, y, fill = dist)) +
  geom_voronoi(alpha = 0.75) +
  stat_voronoi(geom = "path") +
  geom_point()

ggvononoi cambiar el color de fondo

Además, si quieres cambiar el color para el mapa de calor puedes usar scale_fill_gradient, indicando un color para el valor más bajo y otro para el más alto como en el ejemplo siguiente.

# install.packages("ggvoronoi")
# install.packages("ggplot2")
library(ggvoronoi)
library(ggplot2)

ggplot(df, aes(x, y, fill = dist)) +
  geom_voronoi() +
  stat_voronoi(geom = "path") +
  geom_point() +
  scale_fill_gradient(low = "#F9F9F9",
                      high = "#312271")

Eliminar la leyenda del diagrama de Voronoi

Ten en cuenta que si quieres eliminar la leyenda puedes establecer legend.position = "none" dentro de la función theme. También puedes establecerla en otra posición.

# install.packages("ggvoronoi")
# install.packages("ggplot2")
library(ggvoronoi)
library(ggplot2)

ggplot(df, aes(x, y, fill = dist)) +
  geom_voronoi() +
  stat_voronoi(geom = "path") +
  geom_point() +
  theme(legend.position = "none")

Recortar la forma

Puedes darle una forma al diagrama pasando un data frame al argumento outline de la función geom_voronoi, siendo la primera columna la longitud, la segunda la latitud y la tercera una columna representando grupos.

# install.packages("ggvoronoi")
# install.packages("ggplot2")
library(ggvoronoi)
library(ggplot2)

# Círculo
s <- seq(0, 2 * pi, length.out = 3000)
circulo <- data.frame(x = 120 * (1 + cos(s)),
                      y = 120 * (1 + sin(s)),
                      grupo = rep(1, 3000))

ggplot(df, aes(x, y, fill = dist)) +
  geom_voronoi(outline = circulo,
               color = 1, size = 0.1) +
  scale_fill_gradient(low = "#B9DDF1",
                      high = "#2A5783",
                      guide = FALSE) +
  theme_void() +
  coord_fixed()

Diagrama de Voronoi circular en ggplot2

También te puede interesar