使用fviz_eig自定义百分比标签字体时出错,求解决方案
解决fviz_eig自定义方差百分比标签的错误问题
问题根源
你当前代码的核心问题有两个:
- 混用
FactoMineR::PCA和prcomp的结果生成标签,额外计算没必要,且geom_text未指定坐标映射,导致标签位置与图表不匹配。 - 字体名称存在跨系统兼容性问题(比如macOS中"Times New Roman"通常显示为"Times")。
修正后的代码
直接从FactoMineR的PCA结果中提取方差解释数据,明确标签的坐标映射,同时适配不同系统的字体:
library(factoextra) library(FactoMineR) # 执行PCA分析(确保stress.m是你的数据集) stress.m_pca <- PCA(stress.m, scale.unit = TRUE, ncp = 8, graph = FALSE) # 提取各主成分的方差解释百分比,保留两位小数 var_explained <- round(stress.m_pca$eig[, 2], 2) percent_labels <- paste(var_explained, "%", sep = "") # 绘制方差解释图并自定义标签 fviz_eig(stress.m_pca, addlabel = FALSE, ncp = 8) + geom_text( # 明确绑定x(主成分序号)和y(方差百分比)坐标 aes(x = seq_along(var_explained), y = var_explained), label = percent_labels, vjust = -0.6, hjust = 0.3, size = 8, # 根据系统自动适配字体名称 family = ifelse(Sys.info()["sysname"] == "Darwin", "Times", "Times New Roman") )
额外排查建议
如果仍存在字体显示错误,可先查看系统已安装的字体列表,替换为存在的字体名称:
# 加载extrafont包查看可用字体 library(extrafont) fonts()
内容的提问来源于stack exchange,提问作者AOT
相关产品推荐
相关产品推荐

