R语言运行PCA代码出现ggrepel标签重叠警告如何解决?
警告触发原因
- 该警告并非来自PCA计算过程,你运行的
res <- PCA(decathlon, quanti.sup = 11:12, quali.sup = 13, ind.sup = 1:5)代码本身计算没有问题,警告是后续使用factoextra等包绘制PCA可视化图、开启标签自动避让(repel = TRUE)时,由ggrepel包的标签布局算法触发。 - ggrepel的默认逻辑是避免标签互相重叠、也避免标签覆盖散点,内置的
max.overlaps参数默认值为10,当图中需要展示的标签数量过多、布局空间不足时,算法会自动放弃放置部分无法找到合理位置的标签,你收到的提示就是有1个点的标签因重叠过多被跳过了。
注:该警告仅影响可视化展示效果,不会改变PCA分析的计算结果,无业务正确性影响。
可选择的处理方案
- 方案1:调大重叠检查阈值,在绘制PCA图的函数中添加ggrepel的参数即可,如果你使用factoextra的绘图函数,可以直接指定
ggrepel.max.overlaps参数,示例代码:
数值可以根据你的标签数量调整,设为# 绘制样本得分图时调大重叠阈值 fviz_pca_ind(res, geom = "text", repel = TRUE, ggrepel.max.overlaps = Inf)Inf时会完全关闭重叠检查,强制展示所有标签。 - 方案2:减少展示的标签数量,不需要给所有样本/变量加标签,仅保留你需要重点关注的内容即可,比如仅展示指定样本的标签:
# 仅给名称为sample1、sample2的两个样本加标签 fviz_pca_ind(res, geom = "text", repel = TRUE, select.ind = list(name = c("sample1", "sample2"))) - 方案3:缩小标签占位空间,通过调整标签字号、边距参数降低单个标签的占用面积,减少重叠概率:
fviz_pca_ind(res, geom = "text", repel = TRUE, labelsize = 3, ggrepel.args = list(point.padding = 0.1)) - 方案4:直接忽略警告,如果缺失的1个标签对你的分析没有影响,不用做任何处理,不会影响PCA结果的准确性。
内容的提问来源于stack exchange,提问作者Bouregaa Samiha
相关产品推荐
相关产品推荐

