桑基流程图:从一个轴到另一个轴的链接有多个链接
sankey flow diagram: links going one axis to another has multiple links
我使用的是通用糖尿病数据,
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)
以上代码生成此图:
根据上面的情节我有两个问题
从 Glucose="Normal"
到 BMI='30-35'
有很多 link,我该如何排列它们才能让我只看到一个 link 从 Glucose="Normal"
到 BMI='30-35'
和所有其他
如何更改轴之间的配色方案?例如,如果我想要葡萄糖和 BMI 之间的颜色不同,甚至 BMI 和年龄之间的颜色不同?我如何使用 ggalluvial 库来实现?
如有任何线索,我们将不胜感激。感谢您的时间。问候,Trupti
而不是使用 geom_alluvium
使用 geom_flow
解决了问题 1。我仍在探索解决问题 2。谢谢,Trupti
由于层对于每个轴都是唯一的,您可以通过先转换为长格式然后使用 geom_flow(aes(fill = stratum))
来更改每对轴之间流的配色方案。这是来自 the cover illustration to 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")
另一方面,如果您有一些层出现在多个轴上,您将需要采取额外的步骤将这些层区分为单独的因子水平。您可以在转换为长格式后手动执行此操作,或者在转换为长格式时在 to_lodes_form()
中设置 discern = TRUE
。
我使用的是通用糖尿病数据,
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)
以上代码生成此图:
根据上面的情节我有两个问题
从
Glucose="Normal"
到BMI='30-35'
有很多 link,我该如何排列它们才能让我只看到一个 link 从Glucose="Normal"
到BMI='30-35'
和所有其他如何更改轴之间的配色方案?例如,如果我想要葡萄糖和 BMI 之间的颜色不同,甚至 BMI 和年龄之间的颜色不同?我如何使用 ggalluvial 库来实现?
如有任何线索,我们将不胜感激。感谢您的时间。问候,Trupti
而不是使用 geom_alluvium
使用 geom_flow
解决了问题 1。我仍在探索解决问题 2。谢谢,Trupti
由于层对于每个轴都是唯一的,您可以通过先转换为长格式然后使用 geom_flow(aes(fill = stratum))
来更改每对轴之间流的配色方案。这是来自 the cover illustration to 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")
另一方面,如果您有一些层出现在多个轴上,您将需要采取额外的步骤将这些层区分为单独的因子水平。您可以在转换为长格式后手动执行此操作,或者在转换为长格式时在 to_lodes_form()
中设置 discern = TRUE
。