如何在ggplot2绘制的散点图中叠加k-means聚类结果?
在ggplot2散点图中叠加K-Means聚类结果
要把K-Means聚类结果直接显示在原散点图上,只需完成三个核心步骤:执行聚类、合并结果到原数据集、绘图时按聚类分组区分样式。以下是针对mtcars数据集的完整实现:
步骤1:执行K-Means聚类
基于wt和mpg两个变量运行K-Means,这里指定聚类数为3(你可根据需求调整centers参数):
# 提取用于聚类的变量 cluster_data <- mtcars[, c("wt", "mpg")] # 执行K-Means聚类 kmeans_result <- kmeans(cluster_data, centers = 3)
步骤2:合并聚类标签到原数据集
将聚类结果的分组标签添加到mtcars数据框,方便后续绘图调用:
mtcars$cluster <- as.factor(kmeans_result$cluster)
转成因子类型是为了让ggplot将其当作分类变量处理,自动生成离散配色。
步骤3:绘制带聚类区分的散点图
修改原ggplot代码,通过color = cluster(或shape = cluster)让不同聚类的点呈现不同样式:
library(ggplot2) ggplot(mtcars, aes(x = wt, y = mpg, color = cluster)) + geom_point(size = 3) + # 可调整点大小提升辨识度 labs(title = "散点图叠加K-Means聚类结果", x = "车重(wt)", y = "每加仑英里数(mpg)", color = "聚类分组") + theme_minimal()
额外调整建议
- 若要标注聚类中心,可添加图层绘制中心坐标:
# 提取聚类中心并转为数据框 centers_df <- as.data.frame(kmeans_result$centers) centers_df$cluster <- as.factor(1:3) ggplot(mtcars, aes(x = wt, y = mpg, color = cluster)) + geom_point(size = 3) + geom_point(data = centers_df, aes(x = wt, y = mpg), size = 5, shape = 8, color = "black") + # 用星号标记中心 labs(title = "散点图叠加K-Means聚类及中心", x = "车重(wt)", y = "每加仑英里数(mpg)", color = "聚类分组") + theme_minimal()
- 聚类数
centers可根据实际数据调整,也可借助肘部法则等方法确定最优值。
内容的提问来源于stack exchange,提问作者user3138373
相关产品推荐
相关产品推荐

