繁体   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