R语言如何为基于数据框的PCA绘图添加自定义标签并去除冗余图例
解决方案
针对你的三个需求,对应修改逻辑和可运行代码如下:
问题说明&修改逻辑
- 按
name列分组显示同色:你现有的habillage = a$name参数本身即可实现该功能,无需调整。 - 自定义显示
Age分组标签:fviz_pca_ind的label参数仅支持none/ind/var等预设枚举值,不支持直接传入自定义向量,我们可以通过叠加ggplot2文本层的方式实现自定义标签。 - 去除图例重复的黑白文本标识:默认配置下函数会同时渲染点和默认文本标签,生成两个重复的图例项,我们指定仅渲染点后手动加文本层即可解决。
完整修改后代码
# 修正拼写错误:libary改为library library(plyr) library(dplyr) library(factoextra) library(ggplot2) # 你的数据预处理代码,如果你用提供的示例df,把helmes替换为df即可 a <- subset(helmes[sample(nrow(helmes), 100), ], !(name %in% c("Upsell Boost","Marketing 0-25","Dynamic Ad"))) %>% group_by(effective_status,Age,name) %>% summarise( n_obs = n(), Clicks = sum(Clicks,na.rm = TRUE), Impressions = sum(Impressions,na.rm = TRUE), Reach = sum(Reach,na.rm = TRUE), Spend = sum(Spend,na.rm = TRUE), Purchase = sum(Purchase,na.rm = TRUE), PurchaseValue = sum(PurchaseValue,na.rm = TRUE), Date_minus_start_time = mean(Date_minus_start_time,na.rm = TRUE) ) %>% arrange(desc(PurchaseValue)) res.pca <- prcomp(a[4:ncol(a)], scale = TRUE) # 修改后的绘图代码 fviz_pca_ind(res.pca, # 指定仅渲染点,关闭默认文本避免重复图例 geom.ind = "point", habillage = a$name, # 按name分组着色 addEllipses = TRUE, ellipse.type = "confidence", legend.title = "Groups", repel = TRUE) + # 手动添加Age标签 geom_text(aes(label = a$Age), vjust = -0.5, size = 3, check_overlap = TRUE) + # 确保仅保留分组颜色图例,删除多余项 guides(color = guide_legend(title = "Groups"), shape = "none")
可选调整
如果你需要标签完全不重叠,可以把check_overlap = TRUE替换为ggrepel::geom_text_repel(aes(label = a$Age), size = 3),防重叠效果更好。
内容的提问来源于stack exchange,提问作者John Mayer
相关产品推荐
相关产品推荐

