不幸的是,如果不使用 dendextend 包,就没有可用于标记的简单选项。最接近的办法是使用rect.hclust() 公式中的border 参数为矩形着色......但这并不好玩。看看 - http://www.sthda.com/english/wiki/beautiful-dendrogram-visualizations-in-r-5-must-known-methods-unsupervised-machine-learning。
在这种有 2 列的情况下,我建议简单地绘制 z data.frame 并按您的 groups 直观地着色或分组。如果您标记这些点,这将进一步使其与树状图具有可比性。看这个例子:
# your data
gg <- c(1,2,4,3,3,15,16)
hh <- c(1,10,3,10,10,18,16)
z <- data.frame(gg,hh)
# a fun visualization function
visualize_clusters <- function(z, nclusters = 3,
groupcolors = c("blue", "black", "red"),
groupshapes = c(16,17,18),
scaled_axes = TRUE){
nor <- scale(z) # already defualts to use the datasets mean, sd)
d <- dist(nor, method = "euclidean")
fit <<- hclust(d, method = "ward.D2") # saves fit to the environment too
groups <- cutree(fit, k = nclusters)
if(scaled_axes) z <- nor
n <- nrow(z)
plot(z, main = "Visualize Clusters",
xlim = range(z[,1]), ylim = range(z[,2]),
pch = groupshapes[groups], col = groupcolors[groups])
grid(3,3, col = "darkgray") # dividing the plot into a grid of low, medium and high
text(z[,1], z[,2], 1:n, pos = 4)
centroids <- aggregate(z, list(groups), mean)[,-1]
points(centroids, cex = 1, pch = 8, col = groupcolors)
for(i in 1:nclusters){
segments(rep(centroids[i,1],n), rep(centroids[i,2],n),
z[groups==i,1], z[groups==i,2],
col = groupcolors[i])
}
legend("topleft", bty = "n", legend = paste("Cluster", 1:nclusters),
text.col = groupcolors, cex = .8)
}
现在我们可以将它们绘制在一起:
par(mfrow = c(2,1))
visualize_clusters(z, nclusters = 3, groupcolors = c("blue", "black", "red"))
plot(fit); rect.hclust(fit, 3, border = rev(c("blue", "black", "red")))
par(mfrow = c(1,1)
记下您的眼科检查的低-低、低-中、高-高的网格。
我喜欢线段。尝试使用更大的数据,例如:
gg <- runif(30,1,20)
hh <- c(runif(10,5,10),runif(10,10,20),runif(10,1,5))
z <- data.frame(gg,hh)
visualize_clusters(z, nclusters = 3, groupcolors = c("blue", "black", "red"))
希望这会有所帮助。