2014-05-23 102 views
1

所以我有一堆矩陣,我試圖將其作爲貼圖進行繪圖。我正在使用ggplot2軟件包中的heatmap.2()函數。爲多個熱圖縮放熱圖貼圖顏色

我一直在嘗試了一段時間吧,我相信有一個很簡單的解決,但我的問題是這樣的:

如何保持顏色熱圖之間是否一致?例如,使提供顏色的值相對於相對來說是絕對的。

我試圖做類似的對這個問題的東西:

R/ggplot: Reuse color key for multiple heat maps

但我無法弄清楚ggplot功能;我不斷收到一條錯誤消息,指出「情節中沒有圖層」。

在閱讀了關於上述問題的評論之後,我嘗試使用scales::rescale()discrete_scale(),但是前者並沒有消除這個問題,而後者沒有解決問題。

我完全意識到我可能會做一些非常簡單的錯誤,只是有點白癡,但對於我的生活,我無法弄清楚自己出錯的地方。對於數據本身,我試圖繪製10個矩陣/熱點圖,每個10x10個單元(顯示隨時間變化),單元格中的值範圍從1.0到1.2。作爲一個例子,這是我使用的代碼(一旦我有我的10x10矩陣)。

Matrix1<-matrix(data=(runif(100,1.0,1.2)),nrow=10,ncol=10) 
heatmap.2(Matrix1, Colv=NA, Rowv=NA, dendrogram="none", 
    trace="none", key=F, cellnote=round(Matrix1,digits=2), 
    notecex=1.6, notecol="black", 
    labRow=seq(10,100,10), labCol=seq(10,100,10), 
    main="Title1", xlab="Xlab1", ylab="Ylab1" 
) 

因此,與無論是搞清楚如何爲heatmap.2()函數來創建值的換算值,或者我如何使用ggplot()功能將不勝感激任何幫助!

+2

據我所知'ggplot2 ::: heatmap.2'不在ggplot2包中。 –

+0

@TylerRinker正確。它在** gplots **包中。 –

回答

1

重要的是要注意heatmap.2不是ggplot2函數。 ggplot2包不一定與所有繪圖類型兼容。如果您查看?heatmap.2幫助頁面,請在左上角顯示函數的來源。 heatmap.2 {gplots}表示該功能來自gplots包。這些是不同的包裝,所以他們有不同的規則如何工作。

要在不同的熱點圖上獲得相同的顏色,您需要明確獲取breaks=參數。默認情況下,它將觀察到的數據範圍分成相等的塊。但是由於每個數據集可能有不同的最小值和最大值,因此這些塊可能有不同的起始點和結束點。通過指定breaks,可以使它們全部一致。由於您的數據範圍爲1〜1.2,可設置

mybreaks <- seq(1.0, 1.2, length.out=7) 

,然後在您的通話添加

heatmap.2(Matrix1, Colv=NA, Rowv=NA, dendrogram="none", 
    ... 
    breaks=mybreaks, 
    ... 
) 

這應該讓它們搭配起來。

0

也許這會幫助你。使用以下代碼,多個熱圖將存儲在列表中,並稍後顯示在網格中。這將允許您控制每個熱圖的顏色,因爲每個熱圖都是單獨創建的。所以在這種情況下,我選擇在每個圖表中使用綠色和紅色作爲數字範圍。

data(mtcars) 
require(ggplot2) 
require(gridExtra) 


myplotslist2 <- list() 
var = c("mpg", "wt", "drat") 
new = cbind(mtcars, "variable") 
new = cbind(car = rownames(mtcars), new) 
for (i in 1:length(var)){ 
    t= paste("new[[\"variable\"]] = \"", var[[i]],"\"; a = ggplot(new, aes(variable, car)) + geom_tile(aes(fill = ", var[[i]], "),colour = \"white\") + scale_fill_gradient(low = \"red\", high = \"green\") + theme(axis.title.y=element_blank(), axis.text.y=element_blank(),legend.position=\"none\"); myplotslist2[[i]] = a") 
    eval(parse(text=t)) 
} 


grid.arrange(grobs=myplotslist2, ncol=length(var)) 

結果看起來是這樣的: Heatmap

我希望這有助於。

我在我的博文中解釋更多。 https://dwh-businessintelligence.blogspot.nl/2016/05/pca-3d-and-k-means.html