Диаграмма Санки: есть ли способ раскрасить потоки в соответствии с дополнительным столбцом в галлювиале?
Я делаю диаграмму Санки с галлювиалом.
Вот мой набор данных
library(ggsankey)
library(tidyverse)
df <-
mtcars %>%
make_long(cyl, vs, am, gear, carb) %>%
mutate(color = c(rep("red", 80), rep("blue", 80)))
Вы можете получить диаграмму Санки следующим образом:
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))
Теперь я хочу раскрасить потоки между метками по столбцу
color
принадлежащий
df
. Является ли это возможным? Если нет, знаете ли вы другие способы сделать это в R?
Я пытался:
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))
Но сюжет кажется полностью сломанным:
1 ответ
В конце,
ggaluvial
кажется более адаптированным к моей проблеме:
Вот форматирование данных:
df <-
mtcars %>%
select(cyl, vs, am, gear, carb) %>%
mutate(color = c(rep("red", nrow(mtcars)/2), rep("blue", nrow(mtcars)/2)),
id = seq(1:nrow(mtcars))) %>%
pivot_longer(cols = !c(color, id),
names_to = "var",
values_to = "state")
А вот и график с правильными цветами заливки:
df %>%
ggplot(aes(x = var,
stratum = state,
label = state,
alluvium = id)) +
stat_alluvium(aes(fill = color),
width = 0,
alpha = 1,
geom = "flow")+
geom_stratum(width = 0.2)+
geom_text(stat = "stratum", size = 5, angle = 90)+
theme_bw()