如何解决PCA Biplot绘图中的文本重叠问题
解决PCA双图文本重叠问题
最直接的修复:开启文本排斥功能
你的代码里设置了repel=F,这是文本重叠的核心原因,把它改成repel=T,函数会自动调整所有文本的位置,避免互相遮挡:
fviz_pca_biplot(res.pca, labelsize=3, addEllipses = T, repel=T, # 这里修改为TRUE # Individuals geom.ind = "point", geom.var = c("point", "text"), fill.ind = data$Species, pointshape = 21 , pointsize = 2, alpha.ind=0.4, # Variables alpha.var =1, legend.title = list(fill = "Species"))+ guides(color=guide_legend("Species"),fill= F)
其他辅助优化方案
- 微调标签尺寸:如果开启排斥后仍有少量拥挤,可把
labelsize再调小一点,比如labelsize=2.5 - 单独控制变量文本:如果只想优化变量标签的位置,可借助
ggrepel包手动替换文本图层,示例:
library(ggrepel) fviz_pca_biplot(res.pca, labelsize=3, addEllipses = T, repel=F, # Individuals geom.ind = "point", geom.var = "point", # 仅保留变量点,关闭默认文本 fill.ind = data$Species, pointshape = 21 , pointsize = 2, alpha.ind=0.4, # Variables alpha.var =1, legend.title = list(fill = "Species"))+ # 用ggrepel绘制变量文本,自定义排斥规则 geom_text_repel(data = attr(res.pca, "var")$coord, aes(x = Dim.1, y = Dim.2, label = rownames(attr(res.pca, "var")$coord)), size=3)+ guides(color=guide_legend("Species"),fill= F)
- 拆分双图:如果双图本身元素过多,可分开绘制个体得分图和变量载荷图,彻底避免互相干扰:
# 个体得分图 fviz_pca_ind(res.pca, fill.ind = data$Species, pointshape = 21, pointsize = 2, alpha.ind=0.4, addEllipses = T, legend.title = list(fill = "Species"))+ guides(color=guide_legend("Species"),fill= F) # 变量载荷图 fviz_pca_var(res.pca, geom.var = c("point", "text"), repel=T, alpha.var=1)
内容的提问来源于stack exchange,提问作者rezgar
相关产品推荐
相关产品推荐

