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)
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)
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)
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:
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:
# 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.
# 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)
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"))
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")
También te puede interesar