R: ggtree (三) facet_plot

作者: 胡童远 | 来源:发表于2021-07-12 15:06 被阅读0次

    1 read tree

    library("ggtree")
    library("ggplot2")
    library("ggstance")  # for geom_barh
    library("reshape2")  # for melt
    tree = read.tree("taxon_fig.nwk")
    tb = fortify(tree)
    

    2 plot tree
    2.1 配色

    p_sort = c("Firmicutes",
    "Proteobacteria",
    "Actinobacteria",
    "Bacteroidetes",
    "Euryarchaeota",
    "Synergistetes",
    "Tenericutes",
    "Deinococcus_Thermus",
    "Fusobacteria",
    "Spirochaetes",
    "Acidobacteria",
    "Cyanobacteria",
    "Chlamydiae",
    "Chlorobi",
    "Deferribacteres",
    "Planctomycetes",
    "Thermodesulfobacteria",
    "Verrucomicrobia")
    
    col_list = read.table("C:/Users/hutongyuan/Desktop/group_color.list",sep="\t", check.names=F, na.string="", stringsAsFactors=F, quote="", comment.char="")
    colors = col_list$V1[1:18]
    names(colors) <- p_sort
    

    2.2 输入文件及处理

    phylum = read.table("data_phylum.txt", header=T, sep="\t")
    phylum$Phylum = factor(phylum$Phylum, levels=p_sort)
    

    2.3 ggtree

    base = 
    ggtree(tree, color="black", layout="rectangular", 
           size = 0.5) %<+% phylum +
      geom_tippoint(aes(col = as.factor(Phylum)), size=6) +
      theme(legend.title=element_text(face="bold", size=20),                       legend.position="right",
            legend.text=element_text(size=15),
            legend.key=element_rect(size=20)) +
      labs(color = "Phylum") +
      scale_color_manual(
        values = colors)
    ggsave(base, file="tree_base.pdf")
    

    3 add box
    3.1 输入文件及处理

    bgi = read.table("data_bgi.txt", header=T, sep="\t")
    bgi = melt(bgi, id='Genus')
    

    3.2 facet_plot geom_boxploth

    add_box = 
    facet_plot(base, panel = "BGI cohort", 
               data = bgi,
               geom_boxploth, 
               outlier.size = 0.02,
               size = 0.2,
               mapping = aes(x=value*100, 
                             group = label,
                             color = Phylum))
    

    4 add stackplot
    需要的是bar图(分组),但是需要mapping上色,自行构造stackplot(把不需要的颜色值设为0即可)。分组不多手动excel即可,分组太多的话可以用dcast,不完全矩阵会有NA,NA值设为0即可。其实不用mapping也行,即在aes外用color/fill上色,但是需要明确的树结构信息,搞不清树结构误入。
    4.1 输入数据及处理

    group = read.table("data_group.txt", header=T, sep="\t")
    group = melt(group, id='Genus')
    

    4.1 facet_plot geom_barh

    add_group =
    facet_plot(add_box, panel = 'Source', data = group, geom = geom_barh, 
               aes(x = value, fill = variable), 
               width = 1, 
               stat='identity') +
      theme_tree2() +
      labs(fill="Source") +
      scale_fill_manual(
        values = c("Share" = "green",
                   "CGR2" = "indianred3",
                   "BGI_cohort" = "deepskyblue3"))
    

    5 add bar
    目前愚笨的办法是用mapping match color,但是会有0值杂色。最简法干脆不上色,最好的方法是解析树结构,目前解析一般了吧,以后邂逅同问再捯饬。
    5.1 输入数据和处理

    cgr2 = read.table("data_cgr2.txt", header=T, sep="\t")
    

    我试图解析树结构,目前是错了

    5.2 facet_plot geom_barh

    add_bar = 
    facet_plot(add_group, panel = 'CGR2', data = cgr2, geom = geom_barh, 
               aes(x = value*100, fill = variable), color = NA,
               width = 1,
               stat='identity') +
      theme_tree2()
    

    如图见,下面的颜色对应是错的

    清晰地认识到自己R基本功的不足,
    1 一个图,即使是这里的组合组,只能由一套color_scale 一套fill_scale
    2 facet_plot基本参数outlier.size还是惊扰的神架
    3 width size 等基本参数不在库中

    此处,非常感谢Y叔(Prof. 余光创)的答疑。

    ggtree facet_plot 每个美图狗必备技能:
    facet_plot: a general solution to associate data with phylogenetic tree

    相关文章

      网友评论

        本文标题:R: ggtree (三) facet_plot

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