生信之上镜率持续走高的桑基图,如何用多种方法绘制?(附代码)

您所在的位置:网站首页 kegg代谢通路图空间图 生信之上镜率持续走高的桑基图,如何用多种方法绘制?(附代码)

生信之上镜率持续走高的桑基图,如何用多种方法绘制?(附代码)

2023-09-16 04:59| 来源: 网络整理| 查看: 265

一. 桑基图是干什么的 

桑基图(Sankey diagram)本质上是一种流图(flow diagram),最早由爱尔兰人Matthew Henry Phineas Riall Sankey 提出的。早期是用于描述能量、人口或经济等的流动分布情况,故又称为桑基能量分流图或桑基能量平衡图。 

近年来桑基图在各大期刊的上镜率在持续走高,比如2021的纯生物信息学文献:《Conserved pan-cancer microenvironment subtypes predict response to immunotherapy》,就有一个看起来超级复杂的桑基图,图例:(C) Sankey plot showing antigenicity and TMB (left) per TME subtype linked to mutation group (right) across TCGA patients at the pan-cancer level. 

 

那么,什么样的数据适合桑基图呢。一句话,需要体现不同对象主体在不同属性上变化过程的数据,均可用桑基图。数据的形式类似这样(以Titanic数据集为例):

Class Sex Age Survived n 1st Male Child No 0 2nd Male Child No 0 3rd Male Child No 35 Crew Male Child No 0 1st Female Child No 0 2nd Female Child No 0

数据拆解:这里每一行数据对应的是泰坦尼克号里的一个人(对象主体),每一列是这个人的所具有的某一属性(如Class是什么,Sex是什么等),而我们又正好需要展现不同人的不同属性的流向分布,这个时候桑基图就登场了。所以,桑基图呈现的是,横坐标是属性名,纵坐标是对象主体(对象数过多的话,画图不好看,往往用描述统计代替,常用的是频数),如: 

 

二. 该如何实现

这里以上述的Titanic数据集为例,多种方式来实现。首先介绍alluvial包。

 # 安装alluvial包# install.packages("alluvial")library(alluvial)library(dplyr) tit % head()|Class |Sex    |Age   |Survived |  n||:-----|:------|:-----|:--------|--:||1st   |Male   |Child |No       |  0||2nd   |Male   |Child |No       |  0||3rd   |Male   |Child |No       | 35||Crew  |Male   |Child |No       |  0||1st   |Female |Child |No       |  0||2nd   |Female |Child |No       |  0|

画图:

 tit %>% dplyr::select(., Survived, Sex, Age, Class) %>%alluvial::alluvial(    .,                                                          # 子数据集选择    freq=tit$n,                                                 # 频数    col = ifelse(tit$Survived == "Yes", "orange", "grey"),      # 颜色选择,这个是以第一列为依据    border = ifelse(tit$Survived == "Yes", "orange", "grey"),   # 边界颜色    layer = tit$Survived != "Yes",                              # 条纹的绘制顺序,或图层顺序    alpha = 0.8,                                                # 颜色透明度    blocks=FALSE                                                # 是否连接同一属性分类 ) 

那么,桑基图就完成了。做单一桑基图,alluvial包已经足够了,但是一些微调优化,以及组合图形时,alluvial包就显得比较繁琐,由于alluvial包是基于base画图系统。

下面介绍另一个R包-- ggalluvial 包,从名字上便可看到,它是ggplot扩展包 ,返回的是ggplot object,扩展性会更强,输入数据形式更灵活。 

# 安装ggalluvial# install.packages("ggalluvial")library(ggalluvial)library(ggplot2) colnames(tit)[5]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3