You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改plot_model()的X轴刻度标签并拉近图中线条间距?

问题解答

1. 为何c161sex的X轴显示为"male"和"female"?

因为你用了sjmisc::to_factor()函数处理c161sex,而efc是自带变量标签的数据集,这个函数会自动读取变量的标签属性,将原始数值(1、2)替换为对应的标签文本(male、female),而非保留原始数值作为因子水平。

2. 如何替换plot_model生成图的X轴刻度?

你之前用scale_x_discrete(limits = c("Not Fun", "Fun"))导致刻度消失,是因为limits参数用于指定因子水平的顺序/存在性,而非替换标签。正确做法是用breaks对应原始因子水平,labels设置新标签:

针对你的示例代码修改:

plot_model(h, type = "pred", terms = c("X", "Z")) +
  xlab("Fun Level") + 
  ylab("") + 
  theme_bw() + 
  theme(legend.title = element_blank()) +
  # 用breaks匹配原始因子水平,labels设置新标签
  scale_x_discrete(breaks = c("0", "1"), labels = c("Not Fun", "Fun"))

更稳妥的方式是直接在数据中修改因子标签,这样plot_model会自动使用修改后的标签,无需额外添加scale:

# 直接修改X的因子标签
data$X <- factor(data$X, levels = c("0", "1"), labels = c("Not Fun", "Fun"))
# 重新拟合模型并绘图
h <- lm_robust(Y ~ X*Z, data = data)
plot_model(h, type = "pred", terms = c("X", "Z")) +
  xlab("Fun Level") + 
  ylab("") + 
  theme_bw() + 
  theme(legend.title = element_blank())

3. 如何让图中线条间距更近?

可以通过两种方式调整:

  • 缩小Y轴空白范围:用scale_y_continuous(expand = c(0, 0))去掉Y轴上下的空白,让线条更紧凑;若需保留少量空白,可调整参数如expand = c(0.05, 0)。
  • 手动设置Y轴范围:用coord_cartesian(ylim = c(min_value, max_value))指定Y轴的最小/最大值,直接压缩线条垂直间距。

示例代码(结合你的数据集):

plot_model(h, type = "pred", terms = c("X", "Z")) +
  xlab("Fun Level") + 
  ylab("") + 
  theme_bw() + 
  theme(legend.title = element_blank()) +
  scale_x_discrete(breaks = c("0", "1"), labels = c("Not Fun", "Fun")) +
  # 缩小Y轴空白,让线条更紧凑
  scale_y_continuous(expand = c(0, 0))

内容的提问来源于stack exchange,提问作者hy9fesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:01:07