R rect.hclust:树形图中的矩形太高

问题描述 投票:1回答:1

我让一些不同的专家根据它们的相似性对92个对象进行排序。基于他们的答案,我构建了一个92 x 92相异矩阵。在R中,我使用以下命令检查了这个矩阵:

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

为了突出显示聚类,我想在它们周围绘制矩形:

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

结果如下:

enter image description here

但是,当对象具有较长的名称(“AAAAAAAAAAAAAAA A43”而不是“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")

这可以通过得到的树状图来看出。

enter image description here

矩形似乎已经移动到树形图的末尾。不太好。我认为这个故障必定是由于相异矩阵中92个对象的长名称。它似乎也不太相关。只需确保您的对象名称足够短。

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

r hierarchical-clustering hclust dendextend
1个回答
1
投票

您写道:“我也不想使用任何其他软件包,因为我通常觉得它很容易使用。”

虽然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)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.