2

如何使用heatmap.2from 函数gplots在同一页面上生成 3 个热图,其中每个热图具有相同的行宽,以便每个热图的页面长度与其行数成正比?

我对一些虚拟数据的错误尝试如下。我认为部分问题是该heatmap.2函数开始了一个新的绘图,这意味着这layout没有帮助。

gs <- paste("GS",sample(10),sep="_")
mat1 <- matrix(rnorm(100), nrow=10, ncol=10, dimnames=list(sample.int(10000,10),gs ))
mat2 <- matrix(rnorm(150), nrow=15, ncol=10, dimnames=list(sample.int(10000,15),gs ))
mat3 <- matrix(rnorm(200), nrow=20, ncol=10, dimnames=list(sample.int(10000,20),gs ))

nf <- layout(matrix(c(1,2,3),3,1), widths = lcm(5), heights = lcm(5), TRUE)
layout.show(nf)

library(gplots)
heatmap.2(mat1, Rowv=F, Colv=F,col=greenred(200), scale="row",
          key=TRUE, symkey=FALSE, density.info="none", trace="none", dendrogram="none",
          labCol=colnames(mat1), labRow=rownames(mat1), keysize=0.8)
heatmap.2(mat2, Rowv=F, Colv=F,col=greenred(200), scale="row",
          key=TRUE, symkey=FALSE, density.info="none", trace="none", dendrogram="none",
          labCol=colnames(mat2), labRow=rownames(mat2), keysize=0.8)par(mar = c(3,0,1,1))
heatmap.2(mat3, Rowv=F, Colv=F,col=greenred(200), scale="row",
          key=TRUE, symkey=FALSE, density.info="none", trace="none", dendrogram="none",
          labCol=colnames(mat3), labRow=rownames(mat3), keysize=0.8)
4

1 回答 1

2

答案是不,您不能layout与 结合使用heatmap.2

?heatmap.2它是明确的:

heatmap.2() 使用布局并在 2x2 布局的右下角绘制图像。因此,它不能用于多列/行布局,即当 par(mfrow= *) 或 (mfcol= *) 已被调用时。

您可以image在此处使用 with,axis因为您不需要绘制树状图。

library(gplots)

 heatmap3 <- function(mat1){
  image(mat1, Rowv=F, Colv=F,col=greenred(200), scale="row",
        key=TRUE, xlab=colnames(mat1), ylab=rownames(mat1), keysize=0.8)
  axis(1, at = seq(0, 1, length.out = dim(mat1)[1]), labels = gs, 
       las = 2)
  axis(2, at = seq(0, 1, length.out = dim(mat1)[1]), labels = gs, 
       las = 2)
  }
nf <- layout(matrix(c(1,2,3),3,1), widths = lcm(5), heights = lcm(5), TRUE)
heatmap3(mat1)
heatmap3(mat2)
heatmap3(mat3)

在此处输入图像描述

于 2013-07-28T00:28:33.893 回答