分析测试百科网

搜索

分析测试百科网 > 行业资讯 > 微信文章

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

鹿明生物
2021.10.08

蛋白组学、代谢组学服务专家

一. 桑基图是干什么的

桑基图(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|

发布需求
作者
头像
仪器推荐
文章推荐