Librería

ggsankey

Autor principal

David Sjoberg

Conjunto de datos de muestra

Para crear un diagrama de Sankey en ggplot2 tendrás que instalar la librería ggsankey y transformar tus datos (en caso de ser necesario) con la función make_long del paquete. Las columnas deben representar x (el escenario actual), next_x (el siguiente escenario), node (el nodo actual) y next_node (el siguiente nodo). Ten en cuenta que el último escenario debe apuntar a NA.

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggsankey")
library(ggsankey)

df <- mtcars %>%
  make_long(cyl, vs, am, gear, carb)

Nodo, flujo y escenario de ggsankey

Gráfico de Sankey con ggsankey

El paquete ggsankey contiene un geom llamado geom_sankey para crear diagramas de Sankey en ggplot2. Ten en cuenta que tendrás que pasar las variables a aes, especificando un factor como color de fondo. La función también proporciona un tema llamado theme_sankey.

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggsankey")
library(ggsankey)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("dplyr")
library(dplyr) # Necesario

ggplot(df, aes(x = x, 
               next_x = next_x, 
               node = node, 
               next_node = next_node,
               fill = factor(node))) +
  geom_sankey() +
  theme_sankey(base_size = 16)

Diagrama de Sankey en ggplot2

Agregar etiquetas

También puedes agregar etiquetas al diagrama de Sankey usando la función geom_sankey_label del paquete. Recuerda especificar label dentro de aes con la variable que quieras mostrar.

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggsankey")
library(ggsankey)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("dplyr")
library(dplyr) # Necesario

ggplot(df, aes(x = x, 
               next_x = next_x, 
               node = node, 
               next_node = next_node,
               fill = factor(node),
               label = node)) +
  geom_sankey() +
  geom_sankey_label() +
  theme_sankey(base_size = 16)

Sankey diagram in ggplot2 with labels

Personalización del color

Existen varios argumentos que se pueden personalizar para cambiar la apariencia de un diagrama de Sankey en R. Las siguientes imágenes fueron creadas por el autor del paquete para servir como referencia de los argumentos a personalizar:

Argumentos estéticos de geom_sankey

Geometrías de la función geom_sankey

Color de fondo y de los bordes de un gráfico de Sankey

Como ejemplo, modificando algunos argumentos de la función geom_sankey y cambiando la paleta de color de fondo podemos crear algo como lo siguiente:

Diagrama de Sankey en R con ggsankey

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggsankey")
library(ggsankey)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("dplyr")
library(dplyr) # Necesario

ggplot(df, aes(x = x, 
               next_x = next_x, 
               node = node, 
               next_node = next_node,
               fill = factor(node))) +
  geom_sankey(flow.alpha = 0.75, node.color = 1) +
  scale_fill_viridis_d(option = "A", alpha = 0.95) +
  theme_sankey(base_size = 16)

Cambiar el color de las etiquetas

Ten en cuenta que la función geom_sankey_label también contiene varios argumentos para cambiar la apariencia de las etiquetas del gráfico.

Personalizar un diagrama de Sankey en ggplot2 con el paquete ggsankey

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggsankey")
library(ggsankey)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("dplyr")
library(dplyr) # Necesario

ggplot(df, aes(x = x, 
               next_x = next_x, 
               node = node, 
               next_node = next_node,
               fill = factor(node),
               label = node)) +
  geom_sankey(flow.alpha = 0.5, node.color = 1) +
  geom_sankey_label(size = 3.5, color = 1, fill = "white") +
  scale_fill_viridis_d(option = "A", alpha = 0.95) +
  theme_sankey(base_size = 16)

Personalizar la leyenda

Cambiar el título de la leyenda

Al igual que con otros gráficos de ggplot2, es posible cambiar el título de la leyenda. En este caso puedes hacer lo siguiente:

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggsankey")
library(ggsankey)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("dplyr")
library(dplyr) # Necesario

ggplot(df, aes(x = x, 
               next_x = next_x, 
               node = node, 
               next_node = next_node,
               fill = factor(node),
               label = node)) +
  geom_sankey(flow.alpha = 0.5, node.color = 1) +
  geom_sankey_label(size = 3.5, color = 1, fill = "white") +
  scale_fill_viridis_d() +
  theme_sankey(base_size = 16) +
  guides(fill = guide_legend(title = "Título"))

Sankey plot en R

Eliminar la leyenda

Por último, si quieres deshacerte de la leyenda del gráfico de Sankey puedes establecer su posición como "none".

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggsankey")
library(ggsankey)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("dplyr")
library(dplyr) # Necesario

ggplot(df, aes(x = x, 
               next_x = next_x, 
               node = node, 
               next_node = next_node,
               fill = factor(node),
               label = node)) +
  geom_sankey(flow.alpha = 0.5, node.color = 1) +
  geom_sankey_label(size = 3.5, color = 1, fill = "white") +
  scale_fill_viridis_d() +
  theme_sankey(base_size = 16) +
  theme(legend.position = "none")

Eliminar la leyenda de un diagrama de Sankey en ggplot2

También te puede interesar