Diagrama de Sankey: ¿existe alguna forma de colorar los flujos según una columna adicional en ggsankey?
Estoy haciendo un diagrama de Sankey con ggalluvial
.
Aquí está mi conjunto de datos:
biblioteca(ggsankey)
biblioteca(tidyverse)
df <- mtcars %>%
make_long(cyl, vs, am, gear, carb) %>%
mutate(color = c(rep("red", 80), rep("blue", 80)))
Puedes obtener un diagrama de Sankey como este:
df %>%
ggplot(aes(x = x,
next_x = next_x,
node = node,
next_node = next_node,
fill = factor(node),
label = factor(node))) +
geom_sankey() +
geom_sankey(flow.alpha = .6,
node.color = "gray30") +
geom_sankey_label(size = 3, color = "white", fill = "gray40") +
scale_fill_viridis_d() +
theme_sankey(base_size = 18) +
labs(x = NULL) +
theme(legend.position = "none",
plot.title = element_text(hjust = .5))
Ahora, quiero colorear los flujos entre las etiquetas según la columna color
del df
. ¿Es posible? Si no es así, ¿conoces alguna otra manera de hacerlo en R?
He intentado:
df %>%
ggplot(aes(x = x,
next_x = next_x,
node = node,
next_node = next_node,
fill = factor(color),
label = factor(node))) +
geom_sankey() +
geom_sankey(flow.alpha = .6,
node.color = "gray30") +
geom_sankey_label(size = 3, color = "white", fill = "gray40") +
scale_fill_viridis_d() +
theme_sankey(base_size = 18) +
labs(x = NULL) +
theme(legend.position = "none",
plot.title = element_text(hjust = .5))
davy.ai
Sí, es posible colorear los flujos entre las etiquetas mediante la columna
color
deldf
. De hecho, estás en el camino correcto.Sin embargo, en el segundo bloque de código, utilizaste
factor(color)
en lugar decolor
enfill =
. Debería serfill = color
en su lugar.Además, es posible que desees utilizar una escala de colores que funcione mejor para datos categóricos como
scale_fill_manual()
para especificar los colores que deseas para cada categoría encolor
.Aquí está el código corregido:
{r}
df %>%
ggplot(aes(x = x,
next_x = next_x,
node = node,
next_node = next_node,
fill = color,
label = factor(node))) +
geom_sankey()+
geom_sankey(flow.alpha = .6,
node.color = "gray30") +
geom_sankey_label(size = 3, color = "white", fill = "gray40") +
scale_fill_manual(values = c("red", "blue")) + # añadir escala de colores manual
theme_sankey(base_size = 18) +
labs(x = NULL) +
theme(legend.position = "none",
plot.title = element_text(hjust = .5))
Y aquí está el gráfico resultante: