准备数据test.csv
安装R包
# 安装
install.packages("networkD3")
载入环境
# 载入环境
if (T) {
rm(list = ls())
options(stringsAsFactors = F)
library(networkD3)
}
准备测试数据
# 准备测试数据
if (T) {
dat <- read.table("data/raw_data/test.csv",header = F,sep = ",")
head(dat)
}
数据格式调整
NOTE:表中数据整合为种结构化的数据:父节点(source)-子节点(target)-数值(value);因为 sankeyNetwork 函数在后面绘制时的坐标是以 0 开始计算的,所以我们在计算坐标时需要 -1。
# 数据格式调整
if (T) {
# links data
if (T) {
level1 <- aggregate(dat$V5,by=list(dat$V1,dat$V2),sum)
level2 <- aggregate(dat$V5,by=list(dat$V2,dat$V3),sum)
level3 <- aggregate(dat$V5,by=list(dat$V3,dat$V4),sum)
links <- rbind(level3,level2,level1)
colnames(links) <- c('source',"target","value")
tail(links)
}
# node data
if (T) {
nodes <- data.frame(name=unique(c(links$source,links$target)))
}
# id modification
if (T) {
# 0-indexed
links$IDsource <- match(links$source, nodes$name)-1
links$IDtarget <- match(links$target, nodes$name)-1
}
}
桑基图绘制与保存
# sankey diagram绘制
if (T) {
Sankey.p <- sankeyNetwork(Links = links, Nodes = nodes,
Source = "IDsource", Target = "IDtarget",
Value = "value", NodeID = "name",
fontSize = 14, # 字体大小
nodeWidth = 30, # node节点的宽度
sinksRight=T)# 最后子节点文字标注方向
Sankey.p
}
# 结果保存
htmlwidgets::saveWidget(Sankey.p, file="Sankey.html")# 保存网页可交互式动态结果
webshot::webshot(url="Sankey.html", file="Sankey.png")# 以图片格式进行保存
https://www.jianshu.com/p/4d588fc0d39c
网友评论