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
相关产品推荐
相关产品推荐

