You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在散点图中为每个K-Means聚类单独添加均值点?

如何在K-Means聚类散点图中添加每个聚类的均值点

没问题,我来帮你搞定这个需求!你之前用points(mean(data$X), mean(data$Y))只能画出整个数据集的均值,而要显示每个聚类的中心(均值)其实很简单,有两种常用方法:


方法1:直接使用K-Means结果自带的聚类中心

K-Means算法运行后,返回的结果对象里已经包含了每个聚类的中心坐标,存放在results$centers中(这是一个矩阵,每行对应一个聚类的X、Y均值)。你只需要在绘制完聚类散点图后,用这个矩阵来画点即可:

# 先绘制聚类后的散点图
plot(data$X , data$Y, xlab = "X" , ylab = "Y", col = results$cluster , pch = 19)

# 添加每个聚类的均值点,用醒目的样式区分
points(results$centers, pch = 8, cex = 2, col = "black")

参数说明:

  • pch=8:用星号形状标记中心,你也可以换成其他形状(比如pch=1是空心圆,pch=19是实心圆)
  • cex=2:让中心点比数据点大2倍,更显眼
  • col="black":用黑色标记中心,和彩色的聚类数据点形成对比

方法2:手动计算每个聚类的均值

如果你想手动验证或者自定义计算逻辑,可以用aggregate()函数按聚类分组计算均值:

# 按聚类分组计算X和Y的均值
cluster_means <- aggregate(cbind(X, Y) ~ results$cluster, data = data, FUN = mean)

# 绘制均值点(这里用红色区分)
points(cluster_means$X, cluster_means$Y, pch = 8, cex = 2, col = "red")

这种方法得到的结果和results$centers完全一致,因为K-Means的中心就是各聚类的均值。


可选:给均值点添加标签

如果想更清晰地标注每个中心对应的聚类编号,可以用text()函数:

text(results$centers, labels = paste("Cluster", 1:nrow(results$centers)), pos = 4)

pos=4表示标签放在点的右侧,你也可以调整为1(下)、2(左)、3(上)。

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

火山引擎 最新活动