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。
說到交互式可視化,還有之前推出的:
R語言交互式可視化包CanvasXpress
視頻教程:R語言recharts包繪制交互式圖形
往期精品(點擊圖片直達文字對應教程)
機器學習
后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集
總結
以上是生活随笔為你收集整理的network3D: 交互式桑基图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于VTK的MFC应用程序开发(2)
- 下一篇: 带你走进和声搜索算法(Harmony s