蛋白组学、代谢组学服务专家
一. 桑基图是干什么的
桑基图(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数据集为例):
ClassSexAgeSurvivedn1stMaleChildNo02ndMaleChildNo03rdMaleChildNo35CrewMaleChildNo01stFemaleChildNo02ndFemaleChildNo0
数据拆解:这里每一行数据对应的是泰坦尼克号里的一个人(对象主体),每一列是这个人的所具有的某一属性(如Class是什么,Sex是什么等),而我们又正好需要展现不同人的不同属性的流向分布,这个时候桑基图就登场了。所以,桑基图呈现的是,横坐标是属性名,纵坐标是对象主体(对象数过多的话,画图不好看,往往用描述统计代替,常用的是频数),如:
二. 该如何实现
这里以上述的Titanic数据集为例,多种方式来实现。首先介绍alluvial包。
# 安装alluvial包# install.packages("alluvial")library(alluvial)library(dplyr)tit <- tibble::as_data_frame(Titanic)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|