Unfortunately, without using the dendextend package, there are no simple options available for labeling. The closest bet is to to make use of the border
argument in the rect.hclust()
formula to color the rectangles... but that's no fun. Take a look at - http://www.sthda.com/english/wiki/beautiful-dendrogram-visualizations-in-r-5-must-known-methods-unsupervised-machine-learning.
In this case with 2 columns I would recommend simply plotting the z
data.frame and coloring or grouping visually by your groups
. If you label the points, that would further make it comparable to the dendogram. See this example:
# 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)
}
Now we can plot them together:
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)

Make note of the grid for your eye-exam of low-low, low-med, high-high.
I love line segments. Try it on larger data like:
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"))

Hope this helps a little bit.