2016-08-02 195 views
1

此處新建R用戶。 我正在嘗試向使用ggplot2創建的這個熱圖添加一個樹形圖。我怎樣才能做到這一點?我已將我的代碼添加到下面的熱圖中。將樹形圖添加到ggplot2熱圖

#Mtcars using ggplots and reshape2 
install.packages("ggplot2") 
library(ggplot2) 
intall.packages("reshape2") 
library(reshape2) 
data(mtcars) 
Cars <- mtcars[c(1:7)] #subset to 6 genres 

cor(Cars) # 6x6 cor matrix 

#ggplot likes the data 'melted' one value per row 
m <-melt(cor(Cars)) 
p <- ggplot(data=m, aes(x=Var1, y=Var2, fill=value)) + geom_tile() 
p 

#set up a coloring scheme using colorRampPalette 
red=rgb(1,0,0); green=rgb(0,1,0); blue=rgb(0,0,1); black=rgb(0,0,0) 
RtoBrange<-colorRampPalette(c(red, black)) 
BtoGrange<-colorRampPalette(c(black, green)) 

p <- p + scale_fill_gradient2(low=RtoBrange(100), mid="black",   high=BtoGrange(100)) 
p 

感謝您的幫助,

夏洛特

+1

也許'ggdendro'包會幫助你呢? – Warner

+0

有一個很好的例子[在這裏](https://情節。ly/ggplot2/ggdendro-dendrograms /)使用'ggdendro'和'plotly' –

+0

@MattSandgren我鼓勵你看看dendextend。它有一個用ggplot2創建樹狀圖的叉子,它保存圖形參數,例如樹的顏色和線寬。看到這裏:https://cran.r-project.org/web/packages/dendextend/vignettes/introduction.html#ggplot2-integration –

回答

0

使用heatmap.2功能在gplots包(https://cran.r-project.org/web/packages/gplots/gplots.pdf),它會自動添加一個樹形圖的熱圖。使用你的例子:

install.packages("gplots") 
library(gplots) 

data(mtcars) 
Cars <- mtcars[c(1:7)] 

mycolors <- colorRampPalette(c("red", "black", "green")) 
heatmap.2(cor(Cars), trace = "none", col = mycolors) 
2

這是一個有點棘手,因爲不是所有的作品都完全準備好,但它是我在heatmaply開始走到這一步工作的目的。如果您對此感興趣,以便積極地使用樹狀圖創建交互式熱點圖,則應該查看heatmaply vignette

如果您對靜態熱圖感興趣,我相信現有的軟件包已經做得很好,因此重新開發這個軟件可能不值得。 但是,如果這仍然是你想做的事,這裏是它的主要步驟:

  1. 產生樹狀對象
  2. 情節GGPLOT2
  3. 樹狀對象創建的方式,將熱圖從樹形尊重行(或列的順序
  4. 合併的對象。

步驟1可以使用hclustas.dendrogram,步驟2需要噸他來自dendextend的[as.ggdend][2]函數。第3步可以使用heatmaply :: heatmapr + heatmaply ::: ggplot_heatmap(目前隱藏,但將來會公開這種類型的東西)。第4步是棘手的​​,我目前無法「足夠好」地工作,因爲這些元素的比例並不好。

我將其封裝到一個新的ggheatmap函數中,並將其上傳到heatmaply on github。但是這需要更多的工作,所以我願意提出要求。在此期間,這裏是如何做到這一點:

devtools::install_github("ropensci/plotly") # you will probably benefit from the latest version of plotly 
devtools::install_github('talgalili/heatmaply') 

library(heatmaply) 
x <- heatmapr(iris[,-5], scale = "column", colors = "Blues") 
ggheatmap(x) 

輸出看起來是這樣的:

enter image description here

由於我使用GGally::ggmatrix我似乎無法控制每個的比例目的。有可能是更多的在其他方面做的(就像對付標籤的佈局,添加的側面顏色圖例 - 等)

+0

我提交了一個問題:https://github.com/ggobi/ggally/issues/ 188 –

+0

'ggheatmap'不再是'heatmaply',對嗎?它是在版本'0.8.3'中,但不是在當前的'0.11.1' – deeenes

+0

Hi @deeenes這是正確的。 ggheatmap函數被刪除,因爲它不夠光滑。但是,您可以使用「文件」參數將熱映射交互式輸出保存到靜態文件中。我還添加了一個問題,可能在將來添加ggheatmap ... https://github.com/talgalili/heatmaply/issues/108 –

0

或者嘗試heatmap3功能:

library(heatmap3) 
Cars <- mtcars[c(1:7)] 
heatmap3(cor(Cars), scale = "none", sym = T) 

enter image description here

+0

heatmap3是偉大的 - 但它不是基於ggplot2 –

+0

是的,你是絕對正確的。也許他不想重新發明輪子。否則,你的方法似乎是一個解決方案。 – Jimbou

+0

同意。 :) (我也希望使用現有的解決方案之一) –