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

2021-10-08 17:03:41, 多层组学定制服务 上海欧易生物医学科技有限公司


点击上方蓝色字体关注我们

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

一. 桑基图是干什么的

桑基图(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数据集为例):

ClassSexAgeSurvivedn
1stMaleChildNo0
2ndMaleChildNo0
3rdMaleChildNo35
CrewMaleChildNo0
1stFemaleChildNo0
2ndFemaleChildNo0

数据拆解:这里每一行数据对应的是泰坦尼克号里的一个人(对象主体),每一列是这个人的所具有的某一属性(如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|

  • 客服电话: 400-6699-117 转 1000
  • 京ICP备07018254号
  • 电信与信息服务业务经营许可证:京ICP证110310号
  • 京公网安备1101085018
  • 客服电话: 400-6699-117 转 1000
  • 京ICP备07018254号
  • 电信与信息服务业务经营许可证:京ICP证110310号
  • 京公网安备1101085018

Copyright ©2007-2024 ANTPEDIA, All Rights Reserved