使用psych包fa.diagram绘图时变量名显示不全问题求解
解决psych包fa.diagram绘图时变量名被截断的问题
运行以下psych包的因子分析绘图代码时,会出现图中左侧长变量名无法完整显示的问题:
library(psych) # ? fa.diagram f3 <- fa(Thurstone, 3, rotate="cluster") fa.diagram(f3, cut=.4, digits=2) f3l <- f3$loadings fa.diagram(f3l, main="input from a matrix")
该问题在官方文档(psych包因子分析指南图5)中也存在,当前环境版本信息:
> R.version.string [1] "R version 4.4.3 (2025-02-28 ucrt)" > packageVersion("psych") [1] ‘2.5.3’
可行解决方案
1. 调整绘图边距
fa.diagram基于R基础绘图系统,可通过par()提前调整左侧边距,给变量名预留足够空间:
# mar参数顺序:下、左、上、右,增大左侧边距值 par(mar = c(5, 8, 4, 2) + 0.1) fa.diagram(f3, cut=.4, digits=2) # 绘图完成后恢复默认边距 par(mar = c(5, 4, 4, 2) + 0.1)
根据变量名长度调整mar的第二个数值,数值越大左侧留白越多。
2. 缩短变量名
手动或自动缩写长变量名,再传入绘图函数:
# 自动缩写变量名,minlength控制缩写后最小长度 short_names <- abbreviate(rownames(f3$loadings), minlength = 6) rownames(f3$loadings) <- short_names fa.diagram(f3$loadings, main="使用缩写变量名的因子图")
3. 自定义修改fa.diagram函数(进阶)
查看fa.diagram源码,找到绘制变量名的text()调用部分,调整x坐标让变量名左移:
# 查看源码 print(fa.diagram) # 复制源码并修改变量名绘制的x参数,保存为自定义函数 my_fa_diagram <- function(...) { # 粘贴修改后的源码内容 } # 调用自定义函数绘图 my_fa_diagram(f3, cut=.4, digits=2)
4. 替换为其他可视化工具
如果psych包的绘图功能限制较多,可改用更灵活的工具:
factoextra包:fviz_fa_var()函数支持自动调整变量名位置,避免截断ggplot2+ggrepel:手动构建因子载荷图,用ggrepel::geom_text_repel()控制变量名显示
内容的提问来源于stack exchange,提问作者John Stone
相关产品推荐
相关产品推荐

