Блок-схема Sankey: ссылки, идущие от одной оси к другой, имеют несколько ссылок - PullRequest
0 голосов
/ 25 октября 2018

Я использую общие данные о диабете,

datGluBMIAge <- dat[, .(freq = sum(freq)), by=list(Glucose_cat, BMI_cat, Age_cat, Outcome_cat)]
datGluBMIAge<- datGluBMIAge[!(is.na(datGluBMIAge$Age_cat))]
datGluBMIAge<- datGluBMIAge[!(is.na(datGluBMIAge$Glucose_cat))]
datGluBMIAge<- datGluBMIAge[!(is.na(datGluBMIAge$BMI_cat))]
setnames(datGluBMIAge, old = c('Glucose_cat', 'Age_cat','Outcome_cat', 'BMI_cat'), new = c('Glucose', 'Age','Diabetes','BMI'))

ggplot(datGluBMIAge,aes(axis1= Diabetes, axis2=Glucose, axis3 = BMI, axis4 = Age, y = freq)) +
geom_alluvium(aes(fill=Diabetes),aes.bind=TRUE, reverse = FALSE, alpha=0.9) +
scale_fill_manual(labels = c("Negative", "Positive"), values = c("#0066BA", "#FF9400")) +
scale_x_discrete(limits = c("Diabetes", "Glucose","BMI", "Age"), expand = c(0, 0)) +
scale_y_continuous(labels = NULL, expand = c(0,0))+
theme(axis.text.x=element_text(margin = margin(t = 0, unit='pt')),
    axis.title.x = element_text(vjust = 0),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_blank(),
    axis.ticks = element_blank(),
    legend.position = "none")+
geom_stratum(alpha=1, reverse = FALSE) +
geom_text(stat="stratum", label.strata= TRUE, reverse = FALSE) +
ylab(NULL)+xlab(NULL) +
geom_vline(xintercept = 0)

Приведенный выше код создает этот график:

У меня два вопроса на основе приведенного выше графика

  1. Существуют различные ссылки, идущие от Glucose="Normal" до BMI='30-35', как я могу расположить их так, чтобы я видел только одну ссылку, идущую от Glucose="Normal" до BMI='30-35' и вседругие

  2. Как я могу изменить цветовую схему между осями? Например, если я хочу разные цвета между глюкозой и ИМТ и даже разные цвета между ИМТ и возрастом?Как я могу сделать это, используя библиотеку ggalluvial?

любые выводы будут оценены.Спасибо за ваше время.С уважением, Trupti

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Поскольку страты уникальны для каждой оси, вы можете изменить цветовую схему для потоков между каждой парой осей, сначала преобразовав их в длинную форму, а затем используя geom_flow(aes(fill = stratum)).Вот пример, полученный из иллюстрации обложки к ggalluvial :

ggplot(data = titanic_long,
       aes(x = Demographic, stratum = stratum, alluvium = alluvium,
           y = Freq, label = stratum)) +
  geom_flow(aes(fill = stratum)) +
  geom_stratum() + geom_text(stat = "stratum") +
  theme_minimal() +
  ggtitle("passengers on the maiden voyage of the Titanic",
          "stratified by demographics and survival")

enter image description here

Если, нас другой стороны, у вас есть несколько страт, которые появляются на нескольких осях, вам нужно будет сделать дополнительный шаг, различая их как отдельные уровни факторов.Это можно сделать вручную после преобразования в длинную форму или путем установки discern = TRUE в to_lodes_form() при преобразовании в длинную форму.

0 голосов
/ 26 октября 2018

Вместо использования geom_alluvium использование geom_flow решает вопрос 1. Я все еще изучаю, чтобы решить вопрос 2. Спасибо, Trupti

...