专栏首页生信宝典network3D: 交互式桑基图

network3D: 交互式桑基图

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

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

本文分享自微信公众号 - 生信宝典(Bio_data)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • network3D 交互式网络生成

    networkD3是基于D3JS的R包交互式绘图工具,用于转换R语言生成的图为交互式网页嵌套图。目前支持网络图,桑基图,树枝图 (后续相继推出)等。 关于网络图...

    生信宝典
  • 北大课题组报道单氨基酸精度绘制蛋白质功能图谱新方法

    2019年12月16日,魏文胜课题组在Genome Biology杂志在线发表题为“PASTMUS: mapping functional elements a...

    生信宝典
  • R变量索引 - 什么时候使用 @或$

    单细胞分析经常用到Seurat包,整个分析过程中的中间结果都在一个Seurat对象中存储。常需要从里面提取对应数据进行后续分析,有时会用$,有时会用@,怎么选择...

    生信宝典
  • ios内存管理机制

    iOS内存管理机制的原理是引用计数,当这块内存被创建后,它的引用计数+1,表示有一个对象或指针持有这块内存,拥有这块内存的所有权,如果这时候有另外一个对象或指针...

    赵哥窟
  • golang使用原始套接字构造UDP包

    RAW SOCKET 介绍 TCP/IP协议中,最常见的就是原始(SOCKET_RAW)、tcp(SOCKET_STREAM)、udp(SOCKET_DGRA)...

    李海彬
  • windows服务器远程桌面连接教程

    如果服务器远程端口不是默认的3389而是其他端口例如13140,请在上面输入:ip:13140

    chenzhouliyan
  • 数据类型总结(一)(数字,字符串)

    数据类型总结 数字 字符串 列表 元组 字典 按照存值个数: 1个:数字,字符串 多个:列表,元组,字典...

    用户1214487
  • 发售即“暴死”的《无人深空》再推VR模式,曾经的“无人深坑”如何一步步实现逆袭?

    谈到逆袭的游戏作品,《无人深空》不可不提。从最初的高开低走,到制作团队埋头进行优化,再到后续推出的多人模式、VR模式,这款曾被称为“无人深坑”的独立游戏已经逐渐...

    VRPinea
  • PTF:一款多模块渗透测试框架

    The PenTesters Framework (PTF)是一个针对Debian/Ubuntu/ArchLinux开发设计的Python脚本,在PTF的帮助下...

    FB客服
  • 这大概是你见过最全面的 Python 重点了

    https://segmentfault.com/a/1190000018426586

    小小詹同学

扫码关注云+社区

领取腾讯云代金券