#r #ggplot2 #sankey-diagram #ggalluvial
Вопрос:
Я делаю диаграмму Сэнки с ggalluvial
помощью .
Вот мой набор данных
library(ggsankey) library(tidyverse) df lt;- mtcars %gt;% make_long(cyl, vs, am, gear, carb) %gt;% mutate(color = c(rep("red", 80), rep("blue", 80)))
Вы можете получить диаграмму Сэнки, подобную этой:
df %gt;% 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 %gt;% 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. пожалуйста, укажите список использованных вами пакетов. откуда берется функция
make_long()
2. Хороший момент, он есть в
ggsankey
упаковке3. Неважно,
ggaluvial
это намного лучше4. если вы решили проблему, поделитесь своим решением в качестве ответа, чтобы помочь другим.
Ответ №1:
В конце концов, ggaluvial
кажется, что я более приспособлен к моей проблеме:
Вот данные, формирующие:
df lt;- mtcars %gt;% select(cyl, vs, am, gear, carb) %gt;% mutate(color = c(rep("red", nrow(mtcars)/2), rep("blue", nrow(mtcars)/2)), id = seq(1:nrow(mtcars))) %gt;% pivot_longer(cols = !c(color, id), names_to = "var", values_to = "state")
А вот и сюжет с правильным цветовым потоком:
df %gt;% 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()