代码之家  ›  专栏  ›  技术社区  ›  antecessor

在R中组合pheatmaps

  •  1
  • antecessor  · 技术社区  · 7 年前

    我一直在研究如何将两个或更多的pheatmaps(热图)组合在一个最终的图中,但没有成功。

    data1 <- structure(list(DC1 = c(NA, NA, 1.98), DC2 = c(NA, NA, 0.14), 
        DC3 = c(1.85, 1.51, 0.52), DC4 = c(0.89, 0.7, 1.47), DC5 = c(0, 
        0.78, 0), DC6 = c(0, 1.3, 0), DC7 = c(0, 1.47, 0), DC8 = c(0, 
        1.2, 0), DC9 = c(0, 0, 0), DC10 = c(0.51, 1.9, 0)), .Names = c("DC1", 
        "DC2", "DC3", "DC4", "DC5", "DC6", "DC7", "DC8", "DC9", "DC10"), 
        enter code here`class = "data.frame", row.names = c("A", "B",  "C"))
    
    data 2 <- structure(list(DC1 = c(9.56, 1.87, 2.07, 1.87, 2.07, 1.35), DC2 = c(5.51, 1.13, 1.25, 1.13, 0.99, 0.45), DC3 = c(4.84, 1.17, 0.66, 1.17, 
    0.34, 0.16), DC4 = c(4.18, 0.59, 0.05, 0.97, 0.43, 0.59), DC5 = c(3.26, 
    0, 0.14, 0.31, 0.79, 0.63), DC6 = c(3.35, 0, 1.12, 0.05, 1.12, 
    0), DC7 = c(4.18, 0.63, 1.27, 0.47, 1.27, 0), DC8 = c(4.37, 1.17, 
    1.3, 1.17, 0, 0), DC9 = c(4.3, 1.13, 0, 1.13, 0, 0), DC10 = c(7.47, 
    1.88, 0.71, 1.88, 0, 0)), .Names = c("DC1", "DC2", "DC3", "DC4", 
    "DC5", "DC6", "DC7", "DC8", "DC9", "DC10"), class = "data.frame", row.names = c("TD6 vs SH", 
    "TD6 vs SAP", "TD6 vs NEA", "SH vs SAP", "SH vs NEA", "SAP vs NEA"
    ))
    

    我很容易用 pheatmap 通过使用这两个代码:

    hm_data1 <- pheatmap(as.matrix(data1))
    hm_data2 <- pheatmap(as.matrix(data2))
    

    然而,无论如何我都不能把这两个字都印在一个数字上。我想水平地看他们两个。然而,我的真实数字将由16个pheatmaps组成,因此它们必须排列在4列4行中。

    我试过了 par mfrow 没有成功。

    我怎样才能把菲特地图组合起来?

    我知道有很多R包可以绘制热图,但我想用

    1 回复  |  直到 7 年前
        1
  •  1
  •   milan    7 年前

    这会奏效的。

    library(gridExtra); library(pheatmap)
    
    m <- matrix(c(1:4), ncol=2)
    n <- matrix(c(1,1,1,2), ncol=2)
    a <- list(pheatmap(m)[[4]])
    a[[2]] <- pheatmap(n)[[4]]
    z <- do.call(grid.arrange,a)
    plot(z)
    

    基于其中一条评论。如果有多个单独的绘图,可以使用这样的循环。

    mn <- list(m, n)
    
    a <- list()
    for(i in 1:length(mn)){
      a[i] <- list(pheatmap(mn[[i]])[[4]])
    }
    
    z <- do.call(grid.arrange,a)
    plot(z)
    

    关键是要在列表中添加单个绘图的所有数据。然后你可以在列表上循环,应用 pheatmap .

    推荐文章