簡體   English   中英

R rect.hclust:樹狀圖中的矩形太高

[英]R rect.hclust: rectangles too high in dendogram

我請了許多不同的專家根據它們的相似性對 92 個對象進行排序。 根據他們的回答,我構建了一個 92 x 92 的相異矩陣。 在 R 中,我使用以下命令檢查了這個矩陣:

cluster1 <- hclust(as.dist(DISS_MATRIX), method = "average") 
plot(cluster1, cex=.55)

為了突出顯示集群,我想在它們周圍繪制矩形:

rect.hclust(cluster1, k = 3, border = "red")

結果如下:

在此處輸入圖片說明

但是,當對象具有更長的名稱(“AAAAAAAAAAAAAAAA43”而不是“A43”)時,格式將關閉:

rownames(DISS_MATRIX) <- paste0(rep("AAAAAAAAAAAAAAAAAAAAAAAAAAAA",92),1:92)
colnames(DISS_MATRIX) <- paste0(rep("AAAAAAAAAAAAAAAAAAAAAAAAAAAA",92),1:92)
cluster1 <- hclust(as.dist(DISS_MATRIX), method = "average") 
plot(cluster1, cex=.55)
rect.hclust(cluster1, k = 3, border = "red")

這可以通過生成的樹狀圖看出。

在此處輸入圖片說明

矩形似乎已經移動到樹狀圖的末端。 不太好。 我認為這個故障一定是由於相異矩陣中 92 個對象的長名稱造成的。 它也可能看起來不太相關。 只要確保您的對象的名稱足夠短。

但是,由於不同的原因,我希望我的對象具有它們原來的(即長的)名稱。 此圖用於演示,因此我不想使用代碼。 我也不想使用任何其他包,因為我通常發現 hclust 很容易使用。 但是,我沒有找到在 rect.hclust 命令中定位矩形的任何方法。 因此,即使對象名稱很長,我該怎么做才能將矩形定位到樹狀圖中? 謝謝。

您寫道:“我也不想使用任何其他包,因為我通常發現 hclust 非常易於使用。”

雖然 hclust 非常適合創建層次聚類對象,但它在繪圖方面支持不多。 獲得 hclust 輸出后,最好將其更改為 dendrogram(使用as.dendrogram )以進行可視化(因為它更適合as.dendrogram )。 如果不使用打包在包中的復雜代碼,就無法做您想做的事情,這是您前進的最佳途徑(恕我直言)。 (我知道是因為我寫了 rect.dendrogram,而且花了很多工作才能讓它按照你想要的方式工作)

dendextend R 包允許使用許多函數來操作和可視化樹狀圖(請參閱此處的小插圖)。 具體來說, rect.dendrogram 函數可以處理您詢問的這種情況(具有長標簽)。 例如(為了好玩,我添加了 color_branches 和 color_labels ):

library(dendextend)
hc <- mtcars[, c("mpg", "disp")] %>% dist %>% hclust(method = "average") 
dend <- hc %>% as.dendrogram %>% hang.dendrogram
# let's make the text longer
labels(dend)[1] <- "AAAAAAAAAAAAAAAAAAAAA"

par(mar = c(15,2,1,1))
dend %>% color_branches(k=3) %>% color_labels(k=3) %>% plot
dend %>% rect.dendrogram(k=3)

在此處輸入圖片說明

暫無
暫無

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

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