ggalluvial|TCGA临床数据绘制桑基图(Sankey)
本文首发于”生信补给站“,https://mp.weixin.qq.com/s/yhMgkST-rVD6SaQS7R-eoA
桑基图(Sankey diagram),是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。
因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机的能源效率图”而闻名,此后便以其名字命名为“桑基图”。
一 载入R包,数据
本文使用TCGA数据集中的LIHC的临床数据进行展示,大家可以根据数据格式处理自己的临床数据。也可后台回复“R-桑基图”获得示例数据以及R代码。
#install.packages("ggalluvial")
library(ggalluvial)
library(ggplot2)
library(dplyr)
#读入LIHC临床数据
LIHC <- read.csv("TCGA_lihc.csv",header=TRUE)
#展示数据情况
head(LIHC)
PATIENT_ID AGE SEX AJCC_PATHOLOGIC_TUMOR_STAGE OS_STATUS
1 TCGA-XR-A8TE less50 Male STAGE III LIVING
2 TCGA-5R-AA1D less50 Female STAGE III LIVING
3 TCGA-DD-A1EC less50 Female STAGE I LIVING
4 TCGA-ED-A7PY less50 Female STAGE II LIVING
5 TCGA-RC-A6M5 less50 Female STAGE IV LIVING
6 TCGA-DD-A1EH less50 Male STAGE III LIVING
summary(LIHC)
桑基图的数据结构需要节点,权重等信息,ggalluvial 的输入数据可以是长数据亦可以是宽数据。
二 绘制桑基图
1 宽数据示例
对临床数据进行简单的处理,得到后四个变量的频数,整理成宽数据:以下处理过程可参考链接
#分组计算频数
LIHCData <- group_by(data,AGE,SEX,AJCC_PATHOLOGIC_TUMOR_STAGE,OS_STATUS) %>% summarise(., count = n())
#查看宽数据格式
head(LIHCData)
AGE SEX AJCC_PATHOLOGIC_TUMOR_STAGE OS_STATUS count
<fct> <fct> <fct> <fct> <int>
1 50to70 Female STAGE I DECEASED 11
2 50to70 Female STAGE I LIVING 16
3 50to70 Female STAGE II DECEASED 3
4 50to70 Female STAGE II LIVING 11
5 50to70 Female STAGE III DECEASED 8
6 50to70 Female STAGE III LIVING 9
绘制桑基图
ggplot(as.data.frame(LIHCData),
aes(axis1 = AJCC_PATHOLOGIC_TUMOR_STAGE, axis2 = SEX, axis3 = AGE,
y= count)) +
scale_x_discrete(limits = c("AJCC_STAGE", "SEX", "AGE"), expand = c(.1, .05)) +
geom_alluvium(aes(fill = OS_STATUS)) +
geom_stratum() + geom_text(stat = "stratum", label.strata = TRUE) +
theme_minimal() +
ggtitle("Patients in the TCGA-LIHC cohort",
"stratified by demographics and survival")
axis参数设置待展示的节点信息(柱子);
geom_alluvium参数设置组间面积连接,此处按生存状态分组;
2 长数据示例
ggplot2通常处理的都是长表格模式,使用to_lodes_form函数即可转换
#to_lodes_form会生成alluvium和stratum列。主分组位于命名的key列中
LIHC_long <- to_lodes_form(data.frame(LIHCData),
key = "Demographic",
axes = 1:3)
head(LIHC_long)
OS_STATUS count alluvium Demographic stratum
1 DECEASED 11 1 AGE 50to70
2 LIVING 16 2 AGE 50to70
3 DECEASED 3 3 AGE 50to70
4 LIVING 11 4 AGE 50to70
5 DECEASED 8 5 AGE 50to70
6 LIVING 9 6 AGE 50to70
# 绘制桑基图
ggplot(data = LIHC_long,
aes(x = Demographic, stratum = stratum, alluvium = alluvium,
y = count, label = stratum)) +
geom_alluvium(aes(fill = OS_STATUS)) +
geom_stratum() + geom_text(stat = "stratum") +
theme_minimal() +
ggtitle("Patients in the TCGA-LIHC cohort",
"stratified by demographics and survival")
3 状态变化的趋势
vaccinations为R包内置数据集,可展示同一subject在不同survey状态下的response情况。
data(vaccinations)
levels(vaccinations$response) <- rev(levels(vaccinations$response))
ggplot(vaccinations,
aes(x = survey, stratum = response, alluvium = subject,
y = freq,
fill = response, label = response)) +
scale_x_discrete(expand = c(.1, .1)) +
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")
4 更多细节
vignette(topic = "ggalluvial", package = "ggalluvial")
以上就是如何使用R-ggalluvial包绘制桑基图的简单介绍,可以自己动手展示了
ggalluvial|TCGA临床数据绘制桑基图(Sankey)的更多相关文章
- python可视化动态图表: 关于pyecharts的sankey桑基图绘制
最近因工作原因,需要处理一些数据,顺便学习一下动态图表的绘制.本质是使具有源头的流动信息能够准确找到其上下级关系和流向. 数据来源是csv文件 导入成为dataframe之后,列为其车辆的各部件供应商 ...
- vue项目中基于D3.js实现桑基图功能
前端实现数据可视化的方案有很多种,以前都是使用百度的echarts,使用起来很方便,直接按照特定的数据格式输入,就能实现相应的效果,虽然使用方便,但是缺点就是无法自定义一些事件操作,可自由发挥的功能很 ...
- echart 桑基图操作事项
例图 注意: option = { label:{//formatter名字 show:true, formatter:function(obj){ return obj.data.name+'_12 ...
- python数据可视化(一)——绘制随机漫步图
数据可视化指的是通过可视化表示来探索数据,它与数据挖掘紧密相关. python有一系列的可视化和分析工具,最流行的工具之一是matplotlib,它是一个数学绘图库. 实现绘制随机漫步图 利用ra ...
- ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)
本文首发于“生信补给站”:https://mp.weixin.qq.com/s/8kz2oKvUQrCR2_HWYXQT4g 如果有maf格式的文件,可以直接oncoplot包绘制瀑布图,有多种展示和 ...
- 【转】使用Python matplotlib绘制股票走势图
转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...
- Origin9.1如何绘制风向玫瑰图(Binned Data)?
Origin9.1如何绘制风向玫瑰图(Binned Data)? 时间:2014/5/14 21:02:44 点击: 2624 核心提示:今天为大家介绍下如何使用Origin9.1绘制如下图所示的风向 ...
- Origin9.1如何使用原始数据(Raw Data)绘制风向玫瑰图
核心提示:今天为大家简单介绍下如何使用原始数据绘制风向玫瑰图.本例以Origin 9.1进行演示.1.本例所用数据截图如下,列A为风向,列B为风速.2.选中两列数据,进入Plot下的Specializ ...
- Matlab boxplot for Multiple Groups(多组数据的箱线图)
在画之前首先介绍一下Matlab boxplot,下面这段说明内容来自http://www.plob.org/2012/06/10/2153.html 由于matlab具有强大的计算功能,用其统计 ...
随机推荐
- 线程池 | Java多线程,彻底搞懂线程池
熟悉Java多线程编程的同学都知道,当我们线程创建过多时,容易引发内存溢出,因此我们就有必要使用线程池的技术了. 最近看了一些相关文章,并亲自研究了一下源码,发现有些文章还是有些问题的,所以我也总结了 ...
- LC 375. Guess Number Higher or Lower II
We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...
- zip格式压缩文件辅助类(ZipHelper)
/// <summary> /// 压缩解压文件 /// </summary> public class ZipHelper { /// <summary> /// ...
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_06-Feign远程调用-Ribbon测试
2.1.2 Ribbon测试 Spring Cloud引入Ribbon配合 restTemplate 实现客户端负载均衡.Java中远程调用的技术有很多,如: webservice.socket.rm ...
- 123457123457---com.threeObj03.MaJiangertong--- 记忆翻牌益智游戏
com.threeObj03.MaJiangertong--- 记忆翻牌益智游戏
- thinkphp3.2.2 没有定义数据库配置
出现这个问题,温习下tp配置多个数据库 <?php return array( //默认数据库 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => ...
- (二)第一个Servlet
一.预备知识 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个 ...
- MongoDB集群之分片技术应用 —— 学习笔记
课程链接:https://www.imooc.com/learn/501 一.什么是分片? 分片:将数据进行2拆分,将数据水平的分散到不同的服务器上. 二.为什么要分片? 架构上:读写均衡.去中心化 ...
- 为什么每次登录要手动 source /etc/profile ...
由于执行顺序如下,故追个查看以下文件,看看是不是 JAVA_HOME, PATH 等环境变量在后面的文件中被重写覆盖了. 1. /etc/profile2. /etc/environment3. ~/ ...
- 解决Windows7下virtualbox安装ubuntu出现的0x00000000指令引用0x00000000内存,该内存不能为written问题
公司电脑只能用Windows7,不能用10,也没WSL用,最近想跑个Linux环境,因为之前装docker toolbox装了virtualbox,没道理再装vmware,遂用vbox开始折腾,没想到 ...