es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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))

Imagen

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))

Imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible colorear los flujos entre las etiquetas mediante la columna color del df. De hecho, estás en el camino correcto.

    Sin embargo, en el segundo bloque de código, utilizaste factor(color) en lugar de color en fill =. Debería ser fill = 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 en color.

    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:

    Sankey con flujos coloreados

Comments are closed.