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 个对象的长名称造成的。它也可能看起来不太相关。只要确保您的对象的名称足够短即可。

但是,由于不同的原因,我希望我的对象具有其原始(i.e.admittedly 长)名称。此图用于演示,因此我不想使用代码。我也不想使用任何其他包,因为我通常发现 hclust 非常容易使用。但是,我找不到在 rect.hclust 命令中定位矩形的任何方法。因此,即使对象名称很长,我该怎么做才能将矩形定位到树状图中?谢谢。

你写的 "I also do not want to use any other package since I generally find hclust quite easy to use."

虽然 hclust 非常适合创建层次聚类对象,但它在绘图方面的支持并不多。获得 hclust 输出后,最好将其更改为树状图(使用 as.dendrogram)以进行可视化(因为它更适合于此)。 如果不使用复杂的代码,就无法做你想做的事情,它被打包在一个包中,这是你前进的最佳途径(恕我直言)。(我知道,因为我写了 rect.dendrogram,然后花了 a lot of work 让它按照你想要的方式工作)

dendextend R 包提供了许多用于操作和可视化树状图的函数(参见 the vignette here)。 具体来说, 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)