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

R语言Momocs包默认PCA绘图如何移除样本点后的彩色分组框

Momocs包PCA图移除分组彩色凸包的调整方法
  • 查看默认绘图源码:直接在R控制台运行getAnywhere(plot.PCA)即可调出完整的PCA绘图函数源码,你提到的样本点后方彩色分组框,是源码中通过chull()计算每组样本凸包边界、再调用polygon()绘制的半透明填充色块,当分组数超过15个时凸包互相重叠确实会严重影响可读性。
  • 无需修改源码,直接调整plot参数即可关闭彩色分组框:你当前调用的plot(lo.p, ~pop)默认开启了凸包绘制,传入chull = FALSE就能直接移除所有彩色背景框,同时可以替换为更清爽的分组展示样式,参考代码如下:
# 修正原efourier代码末尾多输入的多余字符e
lo.f <- efourier(lo, 12)
lo.p <- PCA(lo.f, fac = pop)

# 无凸包的清爽版PCA绘图
plot(lo.p, ~pop,
     chull = FALSE, # 核心参数:关闭分组彩色凸包框
     points.col = "#333333", # 样本点统一用深灰色,降低视觉干扰
     group.col = hcl.colors(20, "Set3"), # 给20个种群分配区分度足够的柔和配色
     ellipses = TRUE, # 替换为95%置信椭圆展示各组分布范围,比凸包整洁
     ellipses.lty = 1,
     ellipses.alpha = 0.2,
     legend = TRUE
)
  • 如果需要更高的自定义自由度,可以直接提取PCA结果坐标用ggplot2绘制,完全控制所有展示元素:
# 提取主成分得分、分组信息、方差解释率
pca_res <- data.frame(
  PC1 = lo.p$x[,1],
  PC2 = lo.p$x[,2],
  pop = lo.p$fac$pop
)
eig1 <- round(lo.p$eig[1]/sum(lo.p$eig)*100, 1)
eig2 <- round(lo.p$eig[2]/sum(lo.p$eig)*100, 1)

# 自定义绘图
library(ggplot2)
ggplot(pca_res, aes(PC1, PC2, color = pop, shape = pop)) +
  geom_point(size = 1.8, alpha = 0.8) +
  # 不需要分组边界就删掉下一行stat_ellipse
  stat_ellipse(level = 0.95, linewidth = 0.7, alpha = 0.6) +
  theme_classic() +
  labs(x = paste0("PC1 (", eig1, "%)"), y = paste0("PC2 (", eig2, "%)"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:15:30