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

R语言PCA图:用fviz_pca_ind实现指定样本梯度着色及灰色背景展示

使用fviz_pca_ind实现带梯度着色与背景组的PCA观测图

要实现你需求的PCA观测图,核心思路是分层绘制:先把无Rsq值的Group5作为灰色背景层,再叠加Group1-4按Rsq梯度着色的前景层。以下是完整实现代码和关键说明:

完整代码

# 加载所需包
library(factoextra)
library(tidyverse)

# 构建示例数据集(你提供的代码)
iris_mod <- iris %>% mutate(Group = sample(1:5, 150, replace = TRUE))
iris_mod <- iris_mod %>% mutate(Rsq = case_when(Group == 1 ~ 0.05, 
                                                Group == 2 ~ 0.5, 
                                                Group == 3 ~ 0.65, 
                                                Group == 4 ~ 0.75, 
                                                Group == 5 ~ NA))

# PCA分析
iris.pca <- prcomp(iris_mod[,1:4], scale. = TRUE)

# 绘制目标PCA图
# 第一步:绘制Group5的灰色背景点(无Rsq值)
p <- fviz_pca_ind(iris.pca, 
                  geom.ind = "point",
                  data = filter(iris_mod, Group == 5),
                  pointshape = 19,
                  pointsize = 2,
                  fill = "gray80",
                  color = "gray80",
                  alpha = 0.6,
                  legend = "none")

# 第二步:叠加Group1-4的梯度着色点
p <- p + 
  geom_point(data = filter(iris_mod, Group %in% 1:4),
             aes(x = Dim.1, y = Dim.2, color = Rsq),
             size = 2.5,
             shape = 19) +
  # 添加颜色渐变条
  scale_color_viridis_c(option = "plasma", name = "Rsq Value") +
  # 调整主题,让图表更清晰
  theme_minimal() +
  labs(title = "PCA Observations: Rsq Gradient Coloring with Group5 Background")

# 显示图表
print(p)

关键细节说明

  • 分层绘制顺序:先画Group5的灰色背景点,再叠加前景的Group1-4,确保背景不会覆盖前景
  • 颜色映射:用scale_color_viridis_c实现连续梯度着色,你也可以换成其他渐变配色(比如scale_color_gradient(low = "blue", high = "red"))
  • 透明度调整:给Group5的点设置alpha=0.6,避免背景过于突兀,突出前景的梯度点
  • 数据过滤:用filter()精准拆分两组数据,确保颜色映射只作用于有Rsq值的Group1-4

这样就能得到符合需求的PCA观测图:Group1-4的点按Rsq值呈现连续颜色梯度,Group5的灰色点作为背景衬托。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:43:25