[R] 使用networkD3 包绘制桑基图

桑基图,绘制人口流动、网络等表征信息流动关系或者对应关系的图表。
使用bipartite包自带的二分网络数据进行绘制。

library(igraph)
library(networkD3)
library(bipartite)
library(tidyr)

data(Safariland)
nodes = data.frame(ID = unique(c(rownames(Safariland),colnames(Safariland))), stringsAsFactors = FALSE) 

edges <- Safariland %>% as.data.frame() %>% tibble::rownames_to_column(.,var = "plants") %>% 
  pivot_longer(cols = !plants ,names_to  = "animals")  %>% 
  mutate(value = if_else(value>0,1,0))%>%
  filter(value!=0) %>% as.data.frame() 

edges$plants <- match(edges$plants, nodes$ID) - 1
edges$animals <- match(edges$animals, nodes$ID) - 1

networkD3::sankeyNetwork(Links = edges ,
                         Nodes = nodes,
                         Source = "plants", 
                         Target = "animals",
                         Value = "value",
                         NodeID = "ID")

需要注意的地方在于 match 定义顺序后需要再减一

edges$plants <- match(edges$plants, nodes$ID) - 1
edges$animals <- match(edges$animals, nodes$ID) - 1
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容