临床结果分类之间如何展示关联性,一个桑基图搞定它!






临床结果分类之间如何展示关联性,一个桑基图搞定它!

大海哥  生信果  2023-08-31 19:00:59

点击蓝字 关注我们

小伙伴们大家好,我是你们的大海哥!最近大海哥发现很多小伙伴都有类似的需求,就是想把一些分类变量通过样本名联系起来,看看整体的一个趋势,但是又不知道有什么图类可以实现这种需求。那么今天大海哥就给大家推荐一个好用直观且可以展示不同分类变量之间的联系的桑基图。让我们先来了解一下,什么是桑基图?
桑基图(Sankey diagram),又叫桑基能量分流图或者桑基能量平衡图,可从线条的走向,粗细的变化和节点间的比较对数据进行分析,同时可以帮助大家更直观地理解复杂的数据关系。
桑基图通常由一系列连接的箭头表示,每个箭头表示一个特定的流动或转换,箭头的宽度可以表示数量、流量或其他度量指标。图中的节点代表不同的环节或状态,它们之间通过箭头连接,形成了流动的路径。桑基图的颜色、标签和其他可视化元素可以用来传达更多信息,帮助观察者更好地理解数据。
了解了具体的原理后,大家一定就很好奇该怎么去展开绘制了!别着急,大海哥已经准备了多种代码实现方式,大家慢慢食用哦!

#本次桑基图主要代码通过一种基于ggplot2的R包ggalluvial包来实现。#加载包library(ggalluvial)#看看我们测试用的数据head(as.data.frame(UCBAdmissions))
#先画个普通的桑基图看看ggplot(as.data.frame(UCBAdmissions),       aes(y = Freq, axis1 = Gender, axis2 = Dept)) +  geom_alluvium(aes(fill = Admit), width = 1/14) +  geom_stratum(width = 1/8, fill = "green",color = "black") + #设置节点及边框颜色  geom_text(stat = "stratum", aes(label = after_stat(stratum))) + #设置节点标签  scale_x_discrete(limits = c("Gender", "Dept"),                    expand = c(0, 0)) +  scale_fill_brewer(type = "qual",palette = 6) + #颜色填充  ggtitle("UC Berkeley admissions and rejections, by sex and department")

大家肯定觉得颜色不好看,大海哥也这么觉得,所以可以自定义一下颜色

ggplot(as.data.frame(HairEyeColor), aes(y = Freq,axis1 = Hair, axis2 = Eye, fill = Eye,axis3 = Sex))+  geom_flow()+  geom_alluvium(aes(fill = Eye),                curve_type = "sine") +#这里就是定义颜色哦!可以自己调节喜欢的颜色  scale_fill_manual(values = c(Brown = "#70493D",                                Hazel = "#E2AC76",                               Green = "#3F752B",                                Blue  = "#81B0E4")) +  guides(fill = "none") +  geom_stratum(alpha = .2) +  geom_text(stat = "stratum",             size=3,            aes(label = after_stat(stratum)),            reverse = T) +  scale_x_continuous(breaks = 1:3,                      expand = c(0,0),                     labels = c("Hair", "Eye", "Sex")) +  ggtitle("Eye colors of 592 subjects, by sex and hair color")

还可以通过ggplot2的内置方法直接画哦!

ggplot(vaccinations,       aes(x = survey,            stratum = response,            alluvium = subject,           y = freq,           fill = response,            label = response)) +  scale_x_discrete(expand = c(0, 0 )) +  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")

着是不是也还不错
还可以基于ggfittext方法修改节点标签哦

ggplot(vaccinations,       aes(x = survey,            stratum = response,            alluvium = subject,            y = freq,           fill = response,            label = response)) +  scale_x_discrete(expand = c(.1, 0)) +  geom_flow(width = 1/4) +  geom_stratum(alpha = .5, width = 1/4) +  ggfittext::geom_fit_text(stat = "stratum",                            width = 1/4,                            min.size = 3) + #修改支点标签  theme(legend.position = "none") +  ggtitle("vaccination survey responses", "labeled using `geom_fit_text()`")

会自动修改节点标签大小,是不是看起来效果会好得多?
不仅如此,ggauuvial包还可以绘制分面桑基图,多个支点桑基图等。这里大海哥就不一一介绍了。同时桑基图不仅仅可以用于生物信息学领域,其在多个领域中都有广泛的应用,包括能源管理、产业生产、物流分析、环境研究等。例如在能源流动分析方面:桑基图可以用来展示能源在不同来源、消耗者和转换过程之间的流动,帮助研究人员和决策者了解能源的分配和利用情况。是不是很不错?


最后通过上面的几个图例的绘制,我们可以发现,桑基图可以通过曲型块连接不同分类向量,这可以使得我们能够直观的看出哪些向量之间具有共同的表达趋势,从而可以帮助我们在分析过程中做出更有针对性的决策和分析。如此优秀的图,屏幕前的你如果不掌握的话,会不会太可惜了呢?(最后推荐一下大海哥新开发的零代码云生信分析工具平台包含超多零代码小工具,上传数据一键出图,感兴趣的小伙伴欢迎来参观哟,网址:http://www.biocloudservice.com/home.html)


点击“阅读原文”进入网址