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

PCA得分图出现额外空白形状的原因及解决方法咨询

解决factoextra绘制PCA得分图时椭圆中心出现空白伪影的问题

使用factoextra的fviz_pca_ind()结合ggplot2的geom_point()绘制PCA得分图时,每个椭圆中心出现未填充的形状伪影,即使关闭椭圆(addEllipses=FALSE)也无法消除。

问题原因

  • fviz_pca_ind()函数默认会根据habillage参数绘制分组的样本散点
  • 额外调用geom_point()相当于在默认点的基础上叠加了第二层点,椭圆中心的空白伪影是底层默认点未被完全覆盖导致的

解决办法

方法1:禁用默认点,自定义叠加geom_point

在fviz_pca_ind()中设置shape = NA,关闭默认的散点绘制,再添加自定义的geom_point():

library(factoextra)
library(ggplot2)

set.seed(123)  
df <- data.frame(
  stage = rep(c("Day 0", "Prebeating", "Beating"), each = 30),
  variable1 = rnorm(90),
  variable2 = rnorm(90),
  variable3 = rnorm(90)
)

colores <- c("red","purple","blue")
pointss <- c(23,22,21)

pcaData <- df[, -c(1)]
pcaData <- pcaData[, apply(pcaData, 2, var) != 0]
res.pca <-  prcomp(pcaData, center = TRUE, scale. = TRUE)  
labels <- df$stage

fviz_pca_ind(
  res.pca,
  axes = c(1, 2),
  label = "none",
  habillage = labels,
  addEllipses = TRUE,
  ellipse.type = "confidence",
  ellipse.level = 0.95,
  ellipse.alpha = 0.05,
  shape = NA  # 关闭默认点绘制
) + geom_point(aes(fill=labels, shape=labels), color="black", size=6) +
  scale_shape_manual(values=pointss) +
  scale_fill_manual(values=colores) +
  scale_color_manual(values=colores)

方法2:直接用fviz_pca_ind自带参数设置点样式

无需额外调用geom_point(),直接通过fviz_pca_ind()的参数定义点的形状、颜色和大小,更简洁:

fviz_pca_ind(
  res.pca,
  axes = c(1, 2),
  label = "none",
  habillage = labels,
  addEllipses = TRUE,
  ellipse.type = "confidence",
  ellipse.level = 0.95,
  ellipse.alpha = 0.05,
  shape = pointss,  # 指定点形状
  fill = colores,   # 指定填充色
  color = "black",  # 指定点边框颜色
  size = 6          # 指定点大小
) + scale_fill_manual(values=colores) +
  scale_shape_manual(values=pointss)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:17:22