如何使用factoextra::fviz_pca_biplot或ggbiplot在双标图中选择性标记点
解决PCA双标图仅标记指定离群点的问题
步骤1:加载包与数据处理
先加载所需工具包,提取peng数据集中的数值变量用于PCA分析:
library(heplots) library(factoextra) library(ggplot2) # 导入清理后的企鹅数据集 data(peng) # 筛选数值型变量(排除分类变量) peng_num <- peng[, c("bill_length", "bill_depth", "flipper_length", "body_mass")] # 执行标准化PCA pca_result <- prcomp(peng_num, scale. = TRUE)
步骤2:创建目标点标签向量
生成仅包含指定离群点(10、35、283)编号的标签向量,其余位置为空:
target_rows <- c(10, 35, 283) lab <- rep("", nrow(peng)) lab[target_rows] <- as.character(target_rows)
步骤3:绘制带指定标签的PCA双标图
如果直接用fviz_pca_biplot的label_ind参数未显示标签,可通过手动添加文本标签的方式实现:
# 绘制基础双标图(不显示所有点标签) p <- fviz_pca_biplot(pca_result, data = peng, label_var = "var", # 保留变量标签 label_ind = "none", # 隐藏所有点的默认标签 col.ind = ifelse(1:nrow(peng) %in% target_rows, "red", "black"), # 离群点标红 col.var = "blue", ggtheme = theme_minimal()) # 提取目标点的PCA得分数据 pca_scores <- as.data.frame(pca_result$x) target_data <- pca_scores[target_rows, ] target_data$label <- as.character(target_rows) # 添加离群点标签 p + geom_text(data = target_data, aes(x = PC1, y = PC2, label = label), color = "red", size = 4, vjust = -1)
关键说明
- 若你之前用
label_ind = lab无显示,大概率是fviz_pca_biplot对空标签的过滤机制导致,手动添加geom_text能绕开这个问题。 - 确认
target_rows是数据集的行索引,若你所说的"编号"是观测的自定义ID而非行号,需先通过匹配ID找到对应行索引。
内容的提问来源于stack exchange,提问作者user101089
相关产品推荐
相关产品推荐

