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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:35:38