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

如何在R中绘制多子图累积方差图?解决95%累积方差可视化问题

优化高维PCA方差解释率的可视化:拆分成分组子图

当需要展示多达132个主成分的方差解释情况时,单张图表会因为数据点过于密集变得难以阅读——尤其是后面的主成分方差占比极低,几乎挤在一起。拆分成分组子图是完美的解决方案,既能保留所有信息,又能大幅提升可读性。

方案1:按累积方差区间分组(推荐)

这种方式更贴合分析逻辑,把主成分按累积方差的阶段划分,让读者能清晰看到不同阶段的方差贡献变化:

首先,我们先提取并整理PCA的特征值数据:

library(dplyr)

# 提取特征值并整理成数据框
eig_data <- as.data.frame(PCA_Model_Input_Dataset$eig)
colnames(eig_data) <- c("variance", "pct_variance", "cum_pct")
eig_data$comp_num <- seq_len(nrow(eig_data))  # 生成主成分编号

# 按累积方差区间分组,重点突出你关心的95%阈值区间
eig_data$group <- case_when(
  eig_data$cum_pct <= 80 ~ "1. 累积方差 ≤ 80%",
  eig_data$cum_pct > 80 & eig_data$cum_pct <= 90 ~ "2. 80% < 累积方差 ≤ 90%",
  eig_data$cum_pct > 90 & eig_data$cum_pct <= 95 ~ "3. 90% < 累积方差 ≤ 95%",
  TRUE ~ "4. 累积方差 > 95%"
)

然后用ggplot2分面绘制:

library(ggplot2)

ggplot(eig_data, aes(x = comp_num, y = pct_variance)) +
  geom_bar(stat = "identity", fill = "#2E86AB") +
  # 添加累积方差标签,方便查看阈值节点
  geom_text(aes(label = round(cum_pct, 2)), vjust = -0.3, size = 3) +
  # 按分组分面,x轴自适应每组的主成分范围
  facet_wrap(~group, scales = "free_x") +
  labs(title = "PCA主成分方差解释率(按累积方差区间分组)",
       x = "主成分编号",
       y = "方差解释占比(%)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

方案2:按主成分数量均分并拼接

如果你更倾向于用factoextra的fviz_eig函数,可以生成多个子图后拼接,同时针对不同区间调整y轴范围,让低方差的主成分细节更清晰:

library(factoextra)
library(gridExtra)

# 生成各组子图,针对不同区间调整ylim,适配方差占比的量级
p1 <- fviz_eig(PCA_Model_Input_Dataset, addlabels = TRUE, ncp = 20, ylim = c(0, 50)) + 
  ggtitle("主成分 1-20(高方差贡献区)")
p2 <- fviz_eig(PCA_Model_Input_Dataset, addlabels = TRUE, ncp = 60, start = 21, ylim = c(0, 5)) + 
  ggtitle("主成分 21-60(中方差贡献区)")
p3 <- fviz_eig(PCA_Model_Input_Dataset, addlabels = TRUE, ncp = 100, start = 61, ylim = c(0, 5)) + 
  ggtitle("主成分 61-100(低方差贡献区)")
# 聚焦到你关心的95%阈值附近的主成分,放大细节
p4 <- fviz_eig(PCA_Model_Input_Dataset, addlabels = TRUE, ncp = 132, start = 125, ylim = c(0, 1)) + 
  ggtitle("主成分 125-132(接近95%累积方差)")

# 拼接4张子图,布局成2行2列
grid.arrange(p1, p2, p3, p4, nrow = 2, ncol = 2)

为什么这么做?

  • 前几个主成分方差占比高,用较大的y轴范围可以清晰展示它们的核心贡献
  • 后面的主成分方差占比极低,缩小y轴范围后能看清它们的细微差异,尤其是你关注的95%阈值附近的几个主成分(125-132)
  • 分组后每个子图的数据点数量适中,不会出现标签重叠、元素拥挤的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:02:10