R语言|ggtreeExtra包绘制进化树

作者: 维凡生物 | 来源:发表于2022-05-10 18:00 被阅读0次

    R包-ggtreeExtra绘制进化树

    ggplot2提供的geom_tile图层可以画热图了,ggplot2的geom_point或者ggstar的geom_star可以绘制点图层。为了扩展ggtree在点和布局中的系统发育树的外环上呈现相关数据,开发的ggtreeExtra包提供了一个函数,geom_fruit用于将图形与树对齐,相关图表将在树的外部面板的不同位置对齐。还开发geom_fruit_list在树的同一个外部面板上添加多个层。一些函数基于ggplot2并支持使用图形语法。

    绘图示例

    1、下载安装ggtreeExtra包

    if(!requireNamespace("remotes", quietly=TRUE)){
      install.packages("remotes")
    }
    remotes::install_github("YuLab-SMU/ggtreeExtra")
    if (!requireNamespace("BiocManager", quietly=TRUE))
      install.packages("BiocManager")
    BiocManager::install("ggtreeExtra")
    BiocManager::install("ggstar")
    # 下载"ggstar","ggplot2","ggtree","treeio","ggnewscale"包
    install.packages("ggstar")
    install.packages("ggplot2")
    install.packages("ggtree")
    install.packages("treeio")
    install.packages("ggnewscale")
    

    2、加载依赖包

    library(ggtreeExtra) # 设置叠加的包
    library(ggstar) # 提供几何图形
    library(ggplot2) # 
    library(ggtree) # 绘制进化树
    library(treeio)
    library(ggnewscale) # 创建新的scale,多个fill或者color
    

    3、设置工作目录

    setwd("D:/R/ggtreeExtra")
    

    4、数据来源

    # 树状图数据来源路径
    trfile <- system.file("extdata", "tree.nwk", package="ggtreeExtra")
    # 绘制点图和柱状图的数据来源路径
    tippoint1 <- system.file("extdata", "tree_tippoint_bar.csv", package="ggtreeExtra")
    # 树外第一层的绘制热图来数据源路径
    ring1 <- system.file("extdata", "first_ring_discrete.csv", package="ggtreeExtra")
    # 树外第二层的绘制热图来数据源路径
    ring2 <- system.file("extdata", "second_ring_continuous.csv", package="ggtreeExtra")
    

    5、获取数据

    树文件是使用 read . tree 导入的。如果有其他树格式的文件,可以使用 tree io 包的相应函数来读取.

    tree <- read.tree(trfile)
    data = fortify(tree)
    head(data)
    
    image.png

    6、绘制树状图

    # 可视化进化树,这里图形选用的是"fan",还可以是 'rectangular', 'dendrogram', 'slanted', 'ellipse', 'roundrect', 'circular', 'circular', 'inward_circular', 'radial', 'equal_angle', 'daylight' or 'ape'
    p <- ggtree(tree, layout="fan", open.angle=10, size=0.5)
    p
    
    image.png

    7、获取数据集绘制图

    dat1 <- read.csv(tippoint1)
    knitr::kable(head(dat1))
    dat2 <- read.csv(ring1)
    knitr::kable(head(dat2))
    dat3 <-read.csv(ring2)
    knitr::kable(head(dat3))
    head(dat3)
    

    dat1数据集用来绘制成点和条形图


    image.png

    dat2数据集用于绘制热图


    image.png

    dat3数据集用于绘制热图


    image.png

    a、绘制点图层

    p2 <- p + 
      geom_fruit(
        data=dat1,
        geom=geom_star,
        mapping=aes(y=ID, fill=Location, size=Length, starshape=Group),
        position="identity",
        starstroke=0.2
      ) + 
      scale_size_continuous(
        range=c(1, 3), # 大小范围
        guide=guide_legend(
          keywidth=0.5,  # 箱体宽度0.5
          Keyheight=0.5, # 箱体宽度0.5
          override.aes=list(starshape=15),
          order=2
        )
      ) +
      scale_fill_manual(
        values=c("#F8766D", "#C49A00", "#53B400", "#00C094", "#00B6EB", "#A58AFF", "#FB61D7"),
        guide="none" 
      ) + 
      scale_starshape_manual(
        values=c(1, 15),
        guide=guide_legend(
          keywidth=0.5,
          keyheight=0.5,
          order=1
        )
      )
    p2
    
    image.png

    b、绘制热图层

    p3 <- p2 + 
      new_scale_fill() + 
      geom_fruit(
        data=dat2,
        geom=geom_tile,
        mapping=aes(y=ID, x=Pos, fill=Type),
    offset=0.08,   # 外部层之间的距离,默认为树的 x 范围的0.03倍。
    pwidth=0.25  # 外部层的宽度,默认为树的 x 范围的0.2倍。
      ) + 
      scale_fill_manual(
        values=c("#339933", "#dfac03"),
    guide=guide_legend(
    keywidth=0.5,
    keyheight=0.5, 
    order=3
    )
      ) 
    p3
    
    image.png

    c、绘制热图层

    p4 <- p3 + 
      new_scale_fill() +
      geom_fruit(
        data=dat3,
        geom=geom_tile,
        mapping=aes(y=ID, x=Type2, alpha=Alpha, fill=Type2),
        pwidth=0.15,
        axis.params=list(
          axis="x", # 添加图层的轴文本
          text.angle=-45, #x 轴的文本角度
    hjust=0  # 调整文字轴的水平位置
        )
      ) +
      scale_fill_manual(
        values=c("#b22222", "#005500", "#0000be", "#9f1f9f"),
        guide=guide_legend(keywidth=0.5, keyheight=0.5, order=4)
      ) +
      scale_alpha_continuous(
    range=c(0, 0.4), # alpha的范围
    guide=guide_legend(keywidth=0.5, keyheight=0.5, order=5)
      ) 
    p4
    
    image.png

    d、绘制柱状图层

    p5 <- p4 + 
      new_scale_fill() +
      geom_fruit(
        data=dat1,
        geom=geom_bar,
    mapping=aes(y=ID, x=Abundance, fill=Location),  # dat 1的Abundance将被映射到 x   
    pwidth=0.4,
        stat="identity",
        orientation="y", # 轴的方向
        axis.params=list(
          axis="x", # 添加图层的轴文本
    text.angle=-45, # 轴的文字大小
          hjust=0  # 调整轴文本的水平位置
        ),
        grid.params=list() # 添加外部条形图的网格线
      ) + 
      scale_fill_manual(
        values=c("#F8766D", "#C49A00", "#53B400", "#00C094", "#00B6EB", "#A58AFF", "#FB61D7"),
        guide=guide_legend(keywidth=0.5, keyheight=0.5, order=6)
      ) +
      theme(#legend.position=c(0.96, 0.5), # 图例位置
        legend.background=element_rect(fill=NA), # 图例背景
        legend.title=element_text(size=7), # 图例标题大小
        legend.text=element_text(size=6), # 图例文本标签大小
        legend.spacing.y = unit(0.02, "cm")  # 调节y轴图例的距离
      ) 
    p5
    
    image.png

    END

    相关文章

      网友评论

        本文标题:R语言|ggtreeExtra包绘制进化树

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