簡體   English   中英

如何在R中為heatmap.2手動創建樹狀圖矩陣?

[英]How to manually create a dendrogram matrix for heatmap.2 in R?

這是由gplots::heatmap.2創建的我的熱圖的示例:

df<-data.frame(x1=rnorm(100),x2=rnorm(100,2,3),x3=rnorm(100,10,1),
           y1=rnorm(100,5,1),y2=rnorm(100,20,5),y3=rnorm(100,30,2))
cor<-cor(df)

require(gplots)
heatmap.2(cor,trace="none",col=bluered)#fig1
heatmap.2(cor,Rowv=F,Colv=F,dendrogram="none",trace="none",col=bluered)#fig2

我想在圖2中創建一個樹狀圖,其中X和Y都被手動分組在一起,這樣我就可以將相關圖與圖1中的關系圖進行比較,其中圖1是使用距離來計算的。 有人知道怎么做嗎?

您可以手動創建樹狀圖對象,但是對我來說,問題仍然不清楚,為什么在圖2中需要此信息。如果樹狀圖將所有x和y聚為單獨的組,則添加到圖2,樹狀圖的分​​支將彼此交叉,並使樹狀圖(使用實際的分支長度或高度)不可讀。 如果添加使用某些合適高度的樹狀圖,則樹狀圖的分​​支長度沒有意義(它們不對應於實際的相關系數),但是樹狀圖仍可以告訴樹的分支順序。

無論如何,這是從技術上講的解決方法(另請參見Aniko對類似問題的回答 ,有關詳細信息,請參見此處)。

一個使用“真實”的hclust對象(a)(我很快計算出它們,因此它們可能並不完全正確,請使用帶有平均鏈接的層次聚類算法進行檢查,如果需要的話)可以手動生成分支長度:

a<-list()
a$merge<-matrix(c(-1, -2,
                  -4, -5,
                  -3, 1,
                  -6, 2,
                  3, 4), ncol=2, byrow=TRUE)
a$height<-c(0.1, 0.12, 0.12, 0.045, 0.1)
a$order<-1:6
a$labels<-c("x1", "x2", "x3", "y1", "y2", "y3")
class(a)<-"hclust"

或者通過僅使用一些合適的分支長度甚至獲得樹狀圖:

b<-list()
b$merge<-matrix(c(-1, -2,
                  -4, -5,
                  -3, 1,
                  -6, 2,
                  3, 4), ncol=2, byrow=TRUE)
b$height<-c(0.1, 0.1, 0.1, 0.1, 0.2)
b$order<-1:6
b$labels<-c("x1", "x2", "x3", "y1", "y2", "y3")
class(b)<-"hclust"

之后,最終圖可以生成為:

heatmap.2(cor,Rowv=as.dendrogram(a),Colv=as.dendrogram(a),trace="none",col=bluered)#fig2

要么:

heatmap.2(cor,Rowv=as.dendrogram(b),Colv=as.dendrogram(b),trace="none",col=bluered)#fig2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM