本文首发于”生信补给站“,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)的更多相关文章

  1. python可视化动态图表: 关于pyecharts的sankey桑基图绘制

    最近因工作原因,需要处理一些数据,顺便学习一下动态图表的绘制.本质是使具有源头的流动信息能够准确找到其上下级关系和流向. 数据来源是csv文件 导入成为dataframe之后,列为其车辆的各部件供应商 ...

  2. vue项目中基于D3.js实现桑基图功能

    前端实现数据可视化的方案有很多种,以前都是使用百度的echarts,使用起来很方便,直接按照特定的数据格式输入,就能实现相应的效果,虽然使用方便,但是缺点就是无法自定义一些事件操作,可自由发挥的功能很 ...

  3. echart 桑基图操作事项

    例图 注意: option = { label:{//formatter名字 show:true, formatter:function(obj){ return obj.data.name+'_12 ...

  4. python数据可视化(一)——绘制随机漫步图

    数据可视化指的是通过可视化表示来探索数据,它与数据挖掘紧密相关. python有一系列的可视化和分析工具,最流行的工具之一是matplotlib,它是一个数学绘图库. 实现绘制随机漫步图   利用ra ...

  5. ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)

    本文首发于“生信补给站”:https://mp.weixin.qq.com/s/8kz2oKvUQrCR2_HWYXQT4g 如果有maf格式的文件,可以直接oncoplot包绘制瀑布图,有多种展示和 ...

  6. 【转】使用Python matplotlib绘制股票走势图

    转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...

  7. Origin9.1如何绘制风向玫瑰图(Binned Data)?

    Origin9.1如何绘制风向玫瑰图(Binned Data)? 时间:2014/5/14 21:02:44 点击: 2624 核心提示:今天为大家介绍下如何使用Origin9.1绘制如下图所示的风向 ...

  8. Origin9.1如何使用原始数据(Raw Data)绘制风向玫瑰图

    核心提示:今天为大家简单介绍下如何使用原始数据绘制风向玫瑰图.本例以Origin 9.1进行演示.1.本例所用数据截图如下,列A为风向,列B为风速.2.选中两列数据,进入Plot下的Specializ ...

  9. Matlab boxplot for Multiple Groups(多组数据的箱线图)

    在画之前首先介绍一下Matlab boxplot,下面这段说明内容来自http://www.plob.org/2012/06/10/2153.html   由于matlab具有强大的计算功能,用其统计 ...

随机推荐

  1. docker安装hbase

    .下载安装Hbase: ().docker search hbase : 查找Hbase ().docker pull harisekhon/hbase:1.3 注意:不要安装最新版本的,不稳定 (我 ...

  2. 连接池设置导致的“血案” 原创: 一页破书 一页破书 5月6日 这个问题被投诉的几个月了,一直没重视——内部客户嘛😿 问题现象: 隔几周就会出现 A服务调用B服务超时 脚趾头想就是防火墙的问题,A、B两服务之间有防火墙 找运维查看防火墙日志确实断掉了tcp连接,但是是因为B服务5分钟没有回包,下面这个表情就是我当时的心情——其实我们在防火墙、A服务、B服务都抓包了,几十个G的t

    连接池设置导致的“血案” 原创: 一页破书 一页破书 5月6日 这个问题被投诉的几个月了,一直没重视——内部客户嘛

  3. [Java复习] 分布式高可用-Hystrix

    什么是Hystrix? Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制. Hystrix 的设计原则 对依赖服务调用时出现的调用延迟和调用失败进 ...

  4. Jmeter BeanShell 引用变量报错Error or number too big for integer

    如果你通过CSV Data Set Config或者_StringFromFile函数来参数化你的请求,需要特别注意当参数为纯数字时,jmeter会默认将其识别成int型数据,说明jmeter并不是默 ...

  5. C#子线程执行完后通知主线程(转)

    其实这个比较简单,子线程怎么通知主线程,就是让子线程做完了自己的事儿就去干主线程的转回去干主线程的事儿.  那么怎么让子线程去做主线程的事儿呢,我们只需要把主线程的方法传递给子线程就行了,那么传递方法 ...

  6. python检测音频中的静音

    #-*- coding: utf-8 -*- import os import wave from time import sleep import numpy as np SUCCESS = 0 F ...

  7. (八)利用apache组件进行文件上传下载

    一.文件上传 文件上传,即服务器端得到并处理用户上传的文件,这个文件存放在request里,也就是需要对request进行处理. 1.1 编写html文件 <!DOCTYPE html> ...

  8. fastJson工具类

    jar:fast.jar 依赖: <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId&g ...

  9. Caché到MySQL数据同步方法!

    随着医疗行业信息化的发展,积累了大量的业务数据,如何挖掘这些数据,实现数据的可视化被提上日程,医院中通常有许多的信息化系统,使用的又都是不同厂商的数据库产品,如何统一汇聚数据,实现数据互通也是一个大问 ...

  10. 汉化Git Gui

    先来一个图: 其实使用自带的图形化操作git还是很方便的,但是英文界面还是让相当一部分小伙伴不太舒服,比如我哈. 汉化包地址:链接: https://pan.baidu.com/s/1qQtBUsf1 ...