我正在尝试绘制层次聚类的结果R
作为树状图,用矩形标识簇。
以下代码适用于垂直树状图,但对于水平树状图,(horiz=TRUE
),则不绘制矩形。有什么方法可以对水平树状图做同样的事情吗?
library("cluster")
dst <- daisy(iris, metric = c("gower"), stand = FALSE)
hca <- hclust(dst, method = "average")
plot(as.dendrogram(hca), horiz = FALSE)
rect.hclust(hca, k = 3, border = "red")
此外,我想绘制一条线,以所需的距离值切割树木。如何在 R 中绘制它cutree
函数返回簇,但也可以绘制它。
cutree(hca, k = 3)
我正在寻找的所需输出是这样的。
如何在 R 中完成这个工作?
jlhoward 和 Backlin 的答案都很好。
您还可以尝试使用dendextend包,正是为这类事情而设计的。它有一个rect.dendrogram
函数的工作原理如下rect.hclust
,但带有水平参数(加上对矩形边缘位置的更多控制)。要查找相关高度,您可以使用heights_per_k.dendrogram
函数(当同时使用时要快得多dendextendRcpp包裹)
这是一个简单的示例,说明如何获得与上述示例相同的结果(还有彩色分支的额外奖励,只是为了好玩):
install.packages("dendextend")
install.packages("dendextendRcpp")
library("dendextend")
library("dendextendRcpp")
# using piping to get the dend
dend <- iris[,-5] %>% dist %>% hclust %>% as.dendrogram
# plot + color the dend's branches before, based on 3 clusters:
dend %>% color_branches(k=3) %>% plot(horiz=TRUE, main = "The dendextend package \n Gives extended functionality to R's dendrogram object")
# add horiz rect
dend %>% rect.dendrogram(k=3,horiz=TRUE)
# add horiz (well, vertical) line:
abline(v = heights_per_k.dendrogram(dend)["3"] + .6, lwd = 2, lty = 2, col = "blue")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)