美文网首页
学习R绘制桑基图

学习R绘制桑基图

作者: 小qqq | 来源:发表于2022-07-01 22:49 被阅读0次

数据全部来自微信公众号:生信小知识,感谢生信小知识提供的学习平台

准备数据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")# 以图片格式进行保存
Sankey.png

相关文章

网友评论

      本文标题:学习R绘制桑基图

      本文链接:https://www.haomeiwen.com/subject/utzkbrtx.html