2011-12-04 66 views
6

我使用R從一個矩陣使用熱圖創建一個熱圖.2 - 我想將這些圖像分組成一個大的圖像 - 我通常用來實現這個是layout() - 但這不起作用,因爲heatmap.2使用佈局,顯然佈局不能遞歸地工作。佈局內部佈局在R

有沒有人有任何建議如何組合2張圖像沒有佈局,或如何使佈局支持遞歸調用?

mat = matrix(nrow=3,nrow=3,1:9) 
layout(matrix(nrow=2,ncol=1)) 
heatmap.2(mat) ## overrides the layout and produces only one plot that takes whole screen 
heatmap.2(mat) ## still only one image 

謝謝。

回答

6

接下來的內容幾乎肯定不是一個完美的解決方案,但它可能會讓你開始。

創建您自己的heatmap.2函數,調用hm3。在hm3代碼中註釋掉所有的線路:

if (missing(lhei) || is.null(lhei)) 

layout電話:

layout(lmat, widths = lwid, heights = lhei, respect = FALSE) 

它的代碼一大塊,也許是30日線。現在,下面的代碼通過側產生與樹狀圖和按鍵側兩個熱圖:

x <- as.matrix(mtcars) 
lhei <- c(1.5, 4,1.5,4) 
lwid <- c(1.5, 4,1.5,4) 
layout(rbind(c(4,3,8,7),c(2,1,6,5)), 
    widths = lwid, heights = lhei, respect = FALSE) 
hm3(x) 
hm3(x) 

enter image description here

顯然,這將需要相當大的調整,以使它看起來不錯(和更大的繪圖區域,我已經壓縮一切是一個合理的大小在這裏發佈)。

這完全沒有經過測試。使用控制圖的外觀的hm3函數中的任何選項很可能會導致事情稍微有些過時。但這可能是您自己嘗試解決這些問題的一個很好的起點。

+0

謝謝 - 太糟糕了,沒有更簡單的方法來做到這一點......我會留下更多的問題,以防有人知道更通用的解決方案,但看起來生活很艱難,您的解決方案是最好的,(儘管我可能只是解決我的問題,而不是玩熱圖代碼聽起來不好玩)。 – dan12345

1

你打算如何處理結果?

如果您只是想在屏幕上並排比較2張熱貼圖,而不是將它們合併成一張圖,則可以打開2張繪圖設備並排列它們進行比較(比創建單張圖要簡單得多) :

heatmap.2(mat1) 
dev.new() 
heatmap.2(mat2) 

現在使用鼠標將其中一個拉到另一側。

如果您希望將組合圖形包含在出版物中,那麼可能最容易創建2個圖並將它們並排設置在您用來創建文章的任何程序中。如果你在一個文件中需要它們,你仍然可以將2個熱圖(或其他圖)保存爲2個文件,然後使用imagemagick,gimp或inkscape等工具將兩個文件並排放入1中。