2013-07-27 33 views
2

如何使用gplots中的heatmap.2函數在同一頁上生成3個熱圖,其中每個熱圖具有相同的行寬,以便每個熱圖的長度熱圖與其行數成正比?用R中的比例長度圖繪製頁面的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) 
+0

那是你的問題沒事。 'heatmap.2使用'佈局'本身,它覆蓋了你的規範。 –

+0

無論如何用'grid'包裝來做到這一點? – user1447630

+0

我會看看gridBase包。 –

回答

2

答案是不,你不能結合heatmap.2使用layout

?heatmap.2是明確的:

heatmap.2()使用的佈局和在一個2x2佈局的右下角 繪製圖像。因此,它不能用於多列 列/行佈局,即當調用par(mfrow = *)或(mfcol = *)時已調用 。

由於您不想繪製樹狀圖,因此您可以使用image這裏的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) 

enter image description here

+0

對於每個矩陣具有不同行數的情況如何?我怎樣才能用'layout'和'image'來保持每一行的寬度? – user1447630

+0

我也意識到使用'image'中的一個大問題:在'heatmap.2'中,您可以逐行縮放,以便在行內標準化。 「圖像」似乎是爲整個矩陣而不是按行來完成的。 – user1447630