You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用hclust绘制聚类结果?求R语言类似kmeans的聚类绘图方法

当然有办法啦!我来一步步给你讲清楚怎么用hclust实现类似kmeans的聚类绘图效果,再给你推荐几个好用的工具函数~

用hclust实现类似的聚类着色绘图

hclust属于层次聚类,和kmeans的聚类逻辑不同,但我们可以通过几个步骤实现和你给出的kmeans代码一样的可视化效果:

  1. 先对数据做标准化(和kmeans的步骤保持一致,避免变量尺度影响)
  2. 计算样本间的距离(常用欧氏距离,也可以根据需求换曼哈顿、余弦等)
  3. 构建层次聚类树
  4. 切割聚类树,得到指定数量的簇
  5. 用聚类结果给原始数据点着色绘图

具体代码如下:

# 数据标准化
data_scaled <- scale(data)

# 计算样本间欧氏距离
dist_matrix <- dist(data_scaled, method = "euclidean")

# 执行层次聚类,这里用ward.D2方法(聚合类内方差最小的策略,也可换single/complete等)
fit_hclust <- hclust(dist_matrix, method = "ward.D2")

# 切割聚类树,分成3个簇(和kmeans的k=3对应)
clusters_hclust <- cutree(fit_hclust, k = 3)

# 绘制和kmeans效果一致的2D着色图
plot(data_scaled, col = clusters_hclust, pch = 16, main = "Hierarchical Clustering Results")

注意:hclust的聚类结果可能和kmeans略有差异,毕竟两者的聚类逻辑不同,但可视化的呈现形式是完全一致的——按聚类类别给原始数据点着色。

其他支持多聚类方法的绘图工具

如果想要更简便、美观的可视化,或者支持更多聚类算法,推荐这些实用工具:

  • factoextra包的fviz_cluster函数:这是聚类可视化的利器,支持kmeans、hclust、dbscan等多种聚类方法,自动处理细节,输出美观的结果:
library(factoextra)

# kmeans聚类可视化
fviz_cluster(kmeans(data_scaled, 3), data = data_scaled, geom = "point")

# hclust聚类可视化(先把聚类结果整理成函数需要的格式)
hc_result <- list(data = data_scaled, cluster = clusters_hclust)
fviz_cluster(hc_result, geom = "point")
  • ggplot2自定义绘图:如果你需要高度自定义绘图细节,用ggplot2结合聚类结果来画会非常灵活:
library(ggplot2)

# 把标准化数据转换成数据框,添加聚类标签
data_df <- as.data.frame(data_scaled)
data_df$cluster <- as.factor(clusters_hclust)

# 绘制散点图
ggplot(data_df, aes(x = V1, y = V2, color = cluster)) +
  geom_point(size = 3) +
  theme_minimal() +
  labs(title = "Clustering Results with ggplot2")
  • dbscan包(密度聚类):如果你的数据适合密度聚类,dbscan包可以实现,同样能轻松可视化:
library(dbscan)
# 执行密度聚类,eps是邻域半径,minPts是邻域内最小样本数
fit_dbscan <- dbscan(data_scaled, eps = 0.5, minPts = 5)
# +1是为了把噪声点(标记为0)换成不同的颜色
plot(data_scaled, col = fit_dbscan$cluster + 1, pch = 16, main = "DBSCAN Clustering Results")

内容的提问来源于stack exchange,提问作者Abdirizak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:17:50