如何在R中绘制PC2与PC3的PCA双标图?含FactoMineR及prcomp实现
实现PC2为X轴、PC3为Y轴的PCA双标图
下面提供两种主流实现方式,适配你当前的工作流或其他常用PCA工具:
方法1:基于FactoMineR + factoextra(兼容你的现有代码)
factoextra的绘图函数支持通过axes参数指定要展示的主成分,直接设置axes = c(2, 3)即可将PC2设为X轴、PC3设为Y轴。
变量相关性及贡献度图(仅变量)
# 绘制PC2 vs PC3的变量图,保留贡献度配色 fviz_pca_var(res.pca, col.var = "contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), axes = c(2, 3)) # 指定X轴为PC2,Y轴为PC3
双标图(变量+样本)
如果需要同时展示样本和变量的分布,使用fviz_pca_biplot并同样指定axes参数:
# PC2 vs PC3的双标图 fviz_pca_biplot(res.pca, col.var = "contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), col.ind = "gray50", # 样本点设为灰色 axes = c(2, 3))
方法2:基于prcomp + factoextra/ggplot2
如果改用prcomp执行PCA,同样可以用factoextra快速绘图,或用ggplot2手动定制:
步骤1:用prcomp执行PCA
# 标准化数据后执行PCA(prcomp默认不中心化,建议手动指定) res.prcomp <- prcomp(decathlon2.active, scale. = TRUE, center = TRUE)
步骤2:用factoextra绘制双标图
fviz_pca_biplot(res.prcomp, col.var = "contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), col.ind = "gray50", axes = c(2, 3))
步骤3:用ggplot2手动绘制(高度定制化)
如果你需要更灵活的样式控制,可以提取PCA结果数据后用ggplot2绘图:
library(ggplot2) # 提取变量的PC得分 var_scores <- as.data.frame(res.prcomp$rotation[, c(2, 3)]) var_scores$var <- rownames(var_scores) # 提取样本的PC得分 ind_scores <- as.data.frame(res.prcomp$x[, c(2, 3)]) # 绘制双标图 ggplot() + # 绘制样本点 geom_point(data = ind_scores, aes(x = PC2, y = PC3), color = "gray50", alpha = 0.7) + # 绘制变量箭头 geom_segment(data = var_scores, aes(x = 0, y = 0, xend = PC2, yend = PC3), arrow = arrow(length = unit(0.2, "cm")), color = "blue") + # 添加变量标签 geom_text(data = var_scores, aes(x = PC2 * 1.1, y = PC3 * 1.1, label = var), color = "blue") + theme_minimal() + labs(x = "主成分2 (PC2)", y = "主成分3 (PC3)", title = "PCA双标图(PC2 vs PC3)")
内容的提问来源于stack exchange,提问作者sermomon
相关产品推荐
相关产品推荐

