r - 在集群级别显示分层集群(无案例)

标签 r hierarchical-clustering hclust dendextend

我对可视化层次聚类分析的结果感兴趣。是否可以使用树状图来显示聚类(和子聚类)的名称或标签,而不显示进入聚类分析的原始案例?

例如,此代码对 mtcars 数据集应用分层聚类分析。

data("mtcars")
clust <- hclust(get_dist(mtcars, method = "pearson"), method = "complete")
plot(clust)

假设我将树分成 4 个簇,并将这些簇重命名为“轿车”、“卡车”、“跑车”和“货车”(完全任意的标签)。

clust1 <- cutree(clust,4)
clust1 <- dplyr::recode(clust1, 
                               '1'='sedan',
                               '2'='truck',
                               '3'='sportscar',
                               '4'='van')

是否可以显示一个树形图,将这四个标签显示为树底部的节点,从而抑制原始汽车名称的名称?

我也有兴趣以类似的方式显示集群内的子集群,但这可能超出了这个问题的范围。如果您还可以就如何在树状图中显示簇内的子簇同时隐藏原始案例的名称提供建议,那就加分了! :)

提前谢谢您!

最佳答案

是的,你可以做到这一点。我不明白你的get_dist,所以我将使用普通距离dist来说明。

data("mtcars")
clust <- hclust(dist(mtcars), method = "complete")

要截断并仅显示树的顶部,请将其更改为树状图并使用upper。但您需要知道切割的高度。这是在结构 clust 中。

tail(clust$height)
[1] 113.3023 134.8119 141.7044 214.9367 261.8499 425.3447

由于您需要四个分支,因此您可以在第三个和第四个高度(从末端开始)之间的任意高度进行切割。我将使用 213。

MTC_Dend = as.dendrogram(clust)
TreeTop = cut(MTC_Dend, h = 213)$upper

您现在可以使用 plot(TreeTop) 获取基本图,但它不会包含您想要的标签。要更改标签,请使用dendextend包,它提供了专门用于更改标签的工具。

library("dendextend")

labels(TreeTop) = c('sedan','truck', 'sportscar', 'van')
plot(TreeTop)

Top of the tree with new labels

关于r - 在集群级别显示分层集群(无案例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73367324/

相关文章:

r - “高度”必须是向量或矩阵。条码错误

python - 在考虑附加属性的情况下识别 Python 中的空间集群

algorithm - 具有多个特征时间序列信息的对象的聚类算法

python - 如何在终端中显示简单的文本树状图?

R:在两个不同维度的数据框中添加值

r - ggplot : legend for emojis in plot

r - 基于列表对象的子数据框

r - 带标签的R中的水平树状图

r - 基于数据框中列的树状图的颜色分支