如何给热图加两个树 | R

作者: kkkkkkang | 来源:发表于2021-12-13 21:10 被阅读0次

    pheatmap出的图可以有上和左两个hclust聚类图,但那是根据矩阵数据聚类的,若是换成了进化树怎么办?左边一个进化树很容易,ggtree的gheatmap一句话就加上了,但还要再加一个对应的呢?

    使用aplot包拼图实现

    先读入需要的数据

    # sessionInfo()
    # R version 4.1.1 (2021-08-10)
    # Platform: x86_64-w64-mingw32/x64 (64-bit)
    # Running under: Windows 10 x64 (build 18363)
    
    setwd("D:/heat_two_tree/")
    library(ggplot2)
    library(ggtree)
    library(treeio)
    library(aplot)
    library(reshape2)
    tr <- read.tree("tree.bestTree") #首先读入树
    
    heat <- read.table("heat.txt", check.names = F) %>%
        rownames_to_column("x") # 读入热图矩阵
    
    heat2 <- melt(heat, id.vars = "x", variable.name = "y") # 变长数据供ggplot使用
    heat2$value <- as.character(heat2$value) # 二元数据换成character
    anno <- read.table("annota.txt", sep = "\t", header = T) # 树的注释数据
    

    树文件


    树文件

    热图数据文件(随机生成的)


    热图矩阵
    树注释文件
    树注释

    下面开始画图

    p1 <- ggtree(tr) %<+% anno # %<+% 是把注释信息加到树上的一个符号
    p1
    p2 <- p1 + geom_tippoint(aes(color = Species)) +
        # geom_tiplab(aes(color = Species), offset = 0) + # 可添加枝末文字注释,这里是直接在热图里加上的,因为后面用到的翻转树,它字体并没有翻转,不行
        geom_treescale(x= 0.5, y = 0, offset = 0.5) + 
        scale_color_manual(values = c("#e76f51","#ca6702","#d3d3d3",
                                      "#ee9b00","#94d2bd","#98c1d9",
                                      "#0a9396","#e9d8a6")) +
        theme(legend.text=element_text(size=12, face = "italic"),
              legend.title = element_text(size = 12, face = "bold")) 
    p2
    # 这里是对树进行注释
    
    p3 <- p1 + geom_tippoint(aes(color = Species)) +
        # geom_treescale(x= 0.1, y = 5, offset = 0.5) + # 已经有了标尺
        scale_color_manual(values = c("#e76f51","#ca6702","#d3d3d3",
                                      "#ee9b00","#94d2bd","#98c1d9",
                                      "#0a9396","#e9d8a6")) +
        coord_flip() +
        theme(legend.position = "none") # 去掉重复的图例
    p3
    
    pp <- ggplot(heat2, aes(x = x, y = y)) + 
        geom_tile(aes(fill = value)) + 
        theme(axis.ticks = element_blank(),
              axis.title = element_blank(),
              axis.text.x = element_text(angle = 90, vjust = 0.1),
              rect = element_blank()) +
        scale_fill_manual(values = c("white","tomato"),
                          labels = c("No","Yes"),name = "Legend")+
        theme(legend.text=element_text(size=12),
              legend.title = element_text(size = 12, face = "bold"))
    pp
    p <- pp %>% insert_left(p2, width = 0.18) %>%
        insert_bottom(p3, height = 0.1)
    p
    ggsave("heat_two_tree.pdf", p, width = 7, height = 4.5)
    

    p2


    p2

    p3


    p3
    pp
    pp

    p


    p

    相关文章

      网友评论

        本文标题:如何给热图加两个树 | R

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