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
相关产品推荐
相关产品推荐

