美文网首页
学习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