桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。

也可以视为一种层级网络图,比如展示上一篇文章中的生物信息课程网络图;也可以展示菌群随时间变化的趋势,如3分和30分文章差距在哪里文章所示哈扎人肠道菌群的季节变化规律。

下面将用2个例子,以我们生物信息研讨班涉及的学习框架和课程分配为示例数据,展示如何用常见网络图数据绘制桑基图。

最简单桑基图

第一列为上游,第二列为下游,第三列为联通值,值越大线越粗。如果您自己有数据,只需要替换输入部分,后面数据格式转换代码是通用的。

network <- "Src;Target;Value
Bioinfo;Biology;20
Bioinfo;Math;20
Bioinfo;Program;20
Bioinfo;NGS;20
Program;Linux;8
Program;Python;8
Program;R;6
NGS;RNAseq;1
NGS;ChIPseq;1
NGS;m16Sseq;1
NGS;Metagenome;1
NGS;SingeCellSeq;1
NGS;DNAmethylseq;1
NGS;lncRNA;1
NGS;Exomeseq;1
NGS;TCGA;1
"network <- read.table(text=network, sep=";", header=T, row.names=NULL, quote="", comment="")network <- network[,1:3]
colnames(network) <- c("Src", "Target", "Value")# 转换原始数据点为0起始的一系列整数表示
factor_list <- sort(unique(c(levels(network$Src), levels(network$Target))))
num_list <- 0:(length(factor_list)-1)
levels(network$Src) <- num_list[factor_list %in% levels(network$Src)]
levels(network$Target) <- num_list[factor_list %in% levels(network$Target)]network$Src <- as.numeric(as.character(network$Src))
network$Target <- as.numeric(as.character(network$Target))attribute <- data.frame(name=c(factor_list))

network

Src Target Value

1      2    20

1      8    20

1     11    20

1     10    20

11      6     8

11     12     8

attribute

head(attribute[, 1])

[1] 16Sseq Bioinfo Biology ChIPseq  DNAmethylseq

[6] Exomeseq

sankeyNetwork(Links = network, Nodes = attribute,Source = "Src", Target = "Target",Value = "Value", NodeID = "name",fontSize= 12, nodeWidth = 30)

点线分组桑基图

网络数据比上一步的桑基图多一列,指示线的属性;再提供一个节点分组信息文件,获得层次更鲜明的桑基图。

只需要修改对应的数据,后面格式转换的代码通用。

network <- "Src;Target;Value;Link_Grp
Bioinfo;Biology;20;Main
Bioinfo;Math;20;Main
Bioinfo;Program;20;Main
Bioinfo;NGS;20;Main
Program;Linux;8;Sub
Program;Python;8;Sub
Program;R;6;Sub
NGS;RNAseq;1;Sub
NGS;ChIPseq;1;Sub
NGS;16Sseq;1;Sub
NGS;Metagenome;1;Sub
NGS;SingeCellSeq;1;Sub
NGS;DNAmethylseq;1;Sub
NGS;lncRNA;1;Sub
NGS;Exomeseq;1;Sub
NGS;TCGA;1;Sub
"network <- read.table(text=network, sep=";", header=T, row.names=NULL, quote="", comment="")network <- network[,1:4]
colnames(network) <- c("Src", "Target", "Value", "Link_Grp")factor_list <- sort(unique(c(levels(network$Src), levels(network$Target))))
num_list <- 0:(length(factor_list)-1)
levels(network$Src) <- num_list[factor_list %in% levels(network$Src)]
levels(network$Target) <- num_list[factor_list %in% levels(network$Target)]network$Src <- as.numeric(as.character(network$Src))
network$Target <- as.numeric(as.character(network$Target))# 只需要前两列
attribute <- "name;group;size
Bioinfo;Class;4
Biology;Class;4
Math;Class;4
Program;Class;4
NGS;Class;4
Linux;On;2
Python;Off;2
R;Off;2
RNAseq;Off;1
ChIPseq;On;1
16Sseq;On;1
Metagenome;On;1
SingeCellSeq;InPrepare;1
DNAmethylseq;InPrepare;1
lncRNA;InPrepare;1
Exomeseq;InPrepare;1
TCGA;InPrepare;1"attribute <- read.table(text=attribute, sep=";", header=T, row.names=NULL, quote="", comment="")
attribute <- attribute[,1:2]
colnames(attribute) <- c("name", "group")
attribute <- attribute[match(factor_list, attribute$name),]sankeyNetwork(Links = network, Nodes = attribute,Source = "Src", Target = "Target",Value = "Value", NodeID = "name",NodeGroup = "group", LinkGroup = "Link_Grp",fontSize= 14, nodeWidth = 30)

桑基图还有类似的称为冲击图 (alluvial diagram)的展示,具体可见ggalluvial:冲击图展示组间变化、时间序列和复杂多属性alluvial diagram。

说到交互式可视化,还有之前推出的:

  • R语言交互式可视化包CanvasXpress

  • 视频教程:R语言recharts包绘制交互式图形

往期精品(点击图片直达文字对应教程)

机器学习

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

network3D: 交互式桑基图相关推荐

  1. 设计桑基图_教你用pyecharts制作交互式桑基图,赶快学起来吧!

    由于工作的需要,经常需要进行可视化展示,除了一些常用的BI工具,我也会使用python对数据进行可视化. python的第三方可视化库有很多,比如matplotlib.seaborn.plotly.b ...

  2. riverplot绘制桑基图

    桑基图是一种方便说明信息.资源流动和图形,图形中的分.合正如漂流的分叉与汇合,如可用于比较不同簇间关系,可以用来表示各个节点之间转换. Sankey plots are a type of diagr ...

  3. 可视化应用实战案例:绘制交互式+pdf+png等多格式桑基图

    写在前面 桑基图挺好看的,用于观察不同门类之间的从属关系,并且绘制很漂亮的结构图,当然可以用于很多个地方.这里我们用微生物组数据的phyloseq对象,很快很方便的为大家构建一个桑基图.所以如果你有p ...

  4. pyecharts实现多节点、长路径的sankey桑基图

    1 画桑基图一个容易出错的细节 pyecharts︱交互式pyecharts的相关使用教程 简单的用pyecharts实现超多节点.较长路径的桑基图,一个样图: 起先拿网络教程里的数据跑的时候没有任何 ...

  5. 【Python】使用pyecharts制作桑基图

    提示:基于pyecharts和pandas,本文详细而全面的讲解了从数据处理到桑基图制作的整个过程 文章目录 前言 一.pyecharts是什么? 二.使用步骤 1.引入库 2.读入数据 3.数据处理 ...

  6. python怎么画函数图_可视化|Python绘制桑基图

    桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图.它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于电商.材料成分.金融等数据的可视化分析.因18 ...

  7. Python绘制桑基图

    很多时候,我们需要一种必须可视化数据如何在实体之间流动的情况.例如,以居民如何从一个国家迁移到另一个国家为例.这里演示了有多少居民从英格兰迁移到北爱尔兰.苏格兰和威尔士. 桑基图简介 从这个 桑基图 ...

  8. 在线绘图|2分钟轻松搞定桑基图(Sankey diagrams)

    桑基图(Sankey diagrams) 桑基图(Sankey diagrams),即桑基能量分流图,也叫桑基能量平衡图.用来展示数据的"流动"变化,分支的宽度表示流量的大小,应用 ...

  9. python制作桑基图_Python制作桑基图

    这张图是不是十分的漂亮呢?今天偶然间看到一张十分炫酷的图,深深地被它妖艳炫酷的的外表所迷惑,查了许多资料之后,得知它叫"桑基图".古人云:"桑吉桑吉,高贵美丽" ...

最新文章

  1. 特征选择、特征选择方法
  2. Gson源码解析和它的设计模式
  3. 多数元素—leetcode169
  4. 阿里云Tech Insight 企业迁云实战专场强势来袭!
  5. 程序员修神之路--晦涩难懂的CAP,是否完全正确?
  6. AsyncTask知识整理笔记
  7. linux phpunit 安装,在CentOS 7/CentOS 8系统中安装PHPUnit的方法
  8. 安装varnish-dashboard
  9. rabbitmq消息保证幂等的消息设计
  10. webpack打包原理(待续)
  11. 呉服屋 2011/03/24早会文章
  12. 单因子测试用什么软件检查,如何进行单元测试?
  13. 数据库实体表的关系学习
  14. ulipad.4.1.zip linux,UliPad 使用介绍
  15. 小学英语与计算机技术整合,浅谈多媒体技术与小学英语教学的整合
  16. 测试人,测试魂,3年测遍32个城,主管的一句话给予了他源源不断的动力
  17. 和睦家 php研发,豹小秘落户和睦家,探索医疗场景新应用
  18. linux修改X2APIC参数,虚拟机对x2apic destination mode的选择
  19. PWmat案例赏析:利用激光脉冲实现绝缘体-金属超快转变
  20. 《万历十五年》 黄仁宇

热门文章

  1. 客座编辑:崔辰州(1976-),男,博士,中国科学院国家天文台研究员、硕士生导师,国家天文台信息与计算中心主任...
  2. 【数字逻辑设计】推气泡
  3. 【Windows】Windows10-Telnet的使用
  4. 【JVM】javap命令行分析(a++ + ++a)的虚拟机指令
  5. 【数据结构与算法】图结构最小生成树Kruskal算法的Java实现
  6. AE 中的查找与定位,以城市查找为例
  7. JVM系列一:Java虚拟机与操作系统结构比较
  8. input 标签在做动画时的bug
  9. 编程神回复:数学不好能学编程吗?网友的回复令人满怀信心!
  10. 帆软助力惠科集团产值提升1%以上,带来上亿元数据价值