我对可视化层次聚类分析的结果感兴趣。是否可以使用树状图来显示聚类(和子聚类)的名称或标签,而不显示进入聚类分析的原始案例?
例如,此代码对 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)
关于r - 在集群级别显示分层集群(无案例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73367324/