欢迎光临散文网 会员登陆 & 注册

敲黑板!!小云教你学习R包-ggalluvial,绘制炫酷的桑基图(Sankey

2023-09-27 15:24 作者:尔云间  | 我要投稿

小伙伴平时面对多个数据关系不知道如何绘制图,一般来说使用常见的表格已经满足不了小伙伴,并且也不好看。而今天小云给大家介绍的桑基图可以呈现数据的流动和分布。而桑基图(Sankey)作为相对复杂的图表种类,平时很少用到,主要是它使用的而环境不多,并且制作难度很大,但是桑基图可以很好的展示我们数据的分布。 我们就带小伙伴去学习桑基图的绘制,小云带小伙伴绘制的桑基图是一种特定类型的流程图,其中图中延伸分支的宽度对应数据流量的大小,通常应用我们数据的可视化分析。

接下里小云就大家去学习吧!

首先我们先载入R包,主要用到主要的用到还是ggalluvial这专门绘制桑基图的包 library(ggalluvial) library(ggplot2) library(dplyr) #这里小云使用的实例数据带领大家去学习,主要用的使用TCGA数据集中的LIHC的临床数据进行展示,大家可以根据数据格式处理自己的临床数据。

#读入LIHC临床数据 LIHC <- read.csv("data.csv",header=TRUE) #在这里展示数据情况 head(LIHC) summary(LIHC) 小伙伴注意下:桑基图的数据结构需要节点,权重等信息,而ggalluvial的输入数据可以是长数据亦可以是宽数据 我们先对临床数据进行简单的处理得到四个变量的频数,整理成宽数据。: #分组计算频数 LIHCData <- group_by(LIHC,AGE,SEX,AJCC_PATHOLOGIC_TUMOR_STAGE,OS_STATUS) %>% summarise(., count = n()) #查看宽数据格式 head(LIHCData)

上述数据处理完成,我们开始去绘制桑基图:

ggplot(as.data.frame(LIHCData),       aes(axis1 = AJCC_PATHOLOGIC_TUMOR_STAGE, axis2 = SEX, axis3 = AGE,           y= count)) +  scale_x_discrete(limits = c("AJCC_STAGE", "SEX", "AGE"), expand = c(.1, .05)) +  geom_alluvium(aes(fill = OS_STATUS)) +  geom_stratum() + geom_text(stat = "stratum", label.strata = TRUE) +  theme_minimal() +  ggtitle("Patients in the TCGA-LIHC cohort",          "stratified by demographics and survival")

上述代码中,axis参数设置待展示的节点信息(就是柱子) 还有geom_alluvium参数设置的是组间面积连接,这个地方小云这里按照生存状态分组;小伙伴可以按照参数设置自行安排。 接下来我们对长数据示例的展示: ggplot2通常处理的是长表格的模式,那我们就使用to_lodes_form函数即可转换 #to_lodes_form生成alluvium和stratum列,主分组位于key列中 LIHC_long <- to_lodes_form(data.frame(LIHCData),                              key = "Demographic",                              axes = 1:3) head(LIHC_long)

然后接下来绘制桑基图:

# 绘制桑基图 ggplot(data = LIHC_long,       aes(x = Demographic, stratum = stratum, alluvium = alluvium,           y = count, label = stratum)) +  geom_alluvium(aes(fill = OS_STATUS)) +  geom_stratum() + geom_text(stat = "stratum") +  theme_minimal() +  ggtitle("Patients in the TCGA-LIHC cohort",          "stratified by demographics and survival")

接下来我们还以利用桑基图去展示状态变化的趋势 这里我们使用R包中内置数据集 vaccinations 这个可以展示同一个项目下不同生存状态的情况 感兴趣的小伙伴可以按照一下数据形式去设置自己的数据集:

data(vaccinations) levels(vaccinations$response) <- rev(levels(vaccinations$response))#小云在这里作为演示 接下来绘制桑基图: ggplot(vaccinations,       aes(x = survey, stratum = response, alluvium = subject,           y = freq,           fill = response, label = response)) +  scale_x_discrete(expand = c(.1, .1)) +  geom_flow() +  geom_stratum(alpha = .5) +  geom_text(stat = "stratum", size = 3) +  theme(legend.position = "none") +  ggtitle("vaccination survey responses at three points in time")

这样一来状态变化的趋势就展示出来了。 上述就是如何使用R包-ggalluvial绘制桑基图!,小伙伴有没有心动呢,快去设置自己的数据集去完成桑基图。小云在这里提醒大家一下,要注意多多理解代码中参数的含义,这样能把自己可视化的结果展示成自己的图片。

敲黑板!!小云教你学习R包-ggalluvial,绘制炫酷的桑基图(Sankey的评论 (共 条)

分享到微博请遵守国家法律