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

如何在PCA聚类图中添加聚类到中心点的连接线?

给PCA聚类图添加样本到中心的连接线

1. 提取PCA坐标与聚类中心

先从PCA结果中提取样本的主成分坐标,再按物种分组计算每个类别的中心坐标:

library(factoextra)
library(ggplot2)
library(dplyr)

data(iris)
res.pca <- prcomp(iris[,-5], scale=TRUE)

# 提取样本的前两个主成分坐标
pca_coords <- as.data.frame(res.pca$x[,1:2]) %>% 
  mutate(Species = iris$Species)

# 计算每个物种的PCA中心坐标
centroids <- pca_coords %>% 
  group_by(Species) %>% 
  summarise(PC1 = mean(PC1), PC2 = mean(PC2))

2. 绘制带连接线的PCA图

直接用ggplot2构建图表,依次添加连接线、样本点和聚类椭圆:

ggplot() +
  # 绘制样本到对应聚类中心的连接线
  geom_segment(data = pca_coords,
               aes(x = PC1, y = PC2, 
                   xend = centroids$PC1[match(Species, centroids$Species)],
                   yend = centroids$PC2[match(Species, centroids$Species)],
                   color = Species),
               alpha = 0.3) +
  # 绘制样本点
  geom_point(data = pca_coords,
             aes(x = PC1, y = PC2, color = Species),
             shape = 19, alpha = 1) +
  # 添加95%置信椭圆
  stat_ellipse(data = pca_coords,
               aes(x = PC1, y = PC2, color = Species),
               level = 0.95) +
  # 匹配factoextra的简洁风格
  theme_minimal() +
  labs(x = "PC1", y = "PC2", color = "Species")

用ggforce实现连接线

如果想用ggforce包,替换geom_segment为geom_link即可(静态图效果一致,支持动态过渡):

library(ggforce)

ggplot() +
  geom_link(data = pca_coords,
            aes(x = PC1, y = PC2, 
                xend = centroids$PC1[match(Species, centroids$Species)],
                yend = centroids$PC2[match(Species, centroids$Species)],
                color = Species),
            alpha = 0.3, linewidth = 0.5) +
  geom_point(data = pca_coords,
             aes(x = PC1, y = PC2, color = Species),
             shape = 19, alpha = 1) +
  stat_ellipse(data = pca_coords,
               aes(x = PC1, y = PC2, color = Species),
               level = 0.95) +
  theme_minimal() +
  labs(x = "PC1", y = "PC2", color = "Species")

注意事项

  • 连接线透明度设为0.3是为了避免线条密集遮挡样本点,可根据需求调整alpha值。
  • stat_ellipse和factoextra的addEllipses逻辑一致,都是基于多元正态分布生成95%置信椭圆。
  • 直接用ggplot2构建图表比修改factoextra生成的对象更灵活,便于自定义扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:02:43