R语言PCA图如何叠加两类分组信息:按Kingdom画椭圆按Class着色
双分组特征PCA图实现方案
你要同时实现按Kingdom绘制置信椭圆、按Class给样本点着色的需求,可直接基于返回的ggplot对象叠加自定义图层实现,以下是两种常用方案:
方案1:基于ggfortify实现
autoplot返回的是标准ggplot对象,你不需要复用自带的frame参数,直接额外叠加stat_ellipse层按Kingdom分组画椭圆即可:
# 加载依赖包 library(ggplot2) library(ggfortify) # 原有PCA计算逻辑不变 pca_df <- prcomp(df[,-c(1,2)], scale. = TRUE) # 绘图 p <- autoplot(pca_df, data = df, colour = 'Class', size = 3) + # 叠加Kingdom分组的95%正态置信椭圆,可自定义线型、粗细、填充效果 stat_ellipse(aes(group = Kingdom, color = Kingdom), linetype = 2, linewidth = 1) + # 若需要椭圆填充半透明背景,替换为下方代码即可 # stat_ellipse(aes(group = Kingdom, fill = Kingdom), alpha = 0.1, geom = "polygon", linetype = 2) + theme_bw() print(p)
方案2:基于factoextra实现
你之前的参数使用有误,同样可以在fviz_pca_ind返回的图上叠加椭圆层:
library(factoextra) p <- fviz_pca_ind(pca_df, data = df, col.ind = "Class", # 样本点按Class着色 repel = TRUE, # 样本标签防重叠 size = 3, legend.title = list(colour = "Class")) + # 叠加Kingdom分组置信椭圆 stat_ellipse(aes(group = Kingdom, color = Kingdom), linetype = 2, linewidth = 1) + theme_bw() print(p)
可选调整技巧
- 若要避免椭圆颜色和样本点颜色混淆,可将椭圆固定为灰阶色系:
stat_ellipse(aes(group = Kingdom), color = c("black", "gray50")[as.factor(df$Kingdom)], linetype = 2) - 调整置信水平:在
stat_ellipse中添加level = 0.9即可改为90%置信区间,默认值为0.95 - 更换椭圆类型:在
stat_ellipse中添加type = "t"即可使用t分布椭圆,支持的类型和autoplot的frame.type参数完全一致
内容的提问来源于stack exchange,提问作者Ssong
相关产品推荐
相关产品推荐

