如何在散点图中为每个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




