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

如何调整sjPlot::plot_model系数图的X轴(系数范围小于-1,1时)

解决sjPlot绘制回归系数图时的轴范围调整问题

问题背景

使用sjPlot的plot_model()绘制多元回归系数图时,发现系数值的显示范围被自动设为-1到1,但实际系数范围更小,导致估计值难以区分。尝试用plot + scale_x_continuous(limits = c(-0.5, 0.5))调整时触发错误:

Error in scale_x_continuous():
! Discrete values supplied to continuous scale.
ℹ Example values: c12hour, e15relat, e16sex, and e42dep

使用的代码如下:

library(sjPlot)
data(efc)

model <- lm(quol_5/10 ~ c12hour + e15relat + e16sex + e42dep, data = efc) # 将quol_5变量除以10,模拟实际数据中因变量值较小的情况
plot <- plot_model (model, type = "est") 

错误原因

你搞反了坐标轴的对应关系:

  • plot_model(type="est")默认生成垂直系数图,此时X轴是离散的自变量名称(如c12hour),Y轴才是连续的系数估计值。
  • 你想要调整的是系数值的显示范围,对应的是Y轴,但误用了针对X轴的scale_x_continuous(),而离散的自变量名称无法适配连续刻度,因此报错。

解决方法

有两种可行的调整方式:

方式1:调整垂直图的Y轴范围

直接针对Y轴(系数值所在轴)设置刻度范围:

plot <- plot_model(model, type = "est") 
plot + scale_y_continuous(limits = c(-0.5, 0.5))

方式2:切换为水平系数图,调整X轴范围

如果习惯看水平布局的系数图(变量在Y轴,系数在X轴),可以添加horizontal = TRUE参数,此时X轴为连续的系数值,就能正常用scale_x_continuous()调整:

plot <- plot_model(model, type = "est", horizontal = TRUE) 
plot + scale_x_continuous(limits = c(-0.5, 0.5))

关于预测值范围设置的疑问

绘制预测值时设置变量范围的方法不能直接应用到系数图的轴范围调整。两者逻辑完全不同:

  • 预测值图中设置的是自变量的取值范围,用于生成不同自变量取值下的预测结果;
  • 系数图的轴范围调整是对ggplot刻度的直接修改,目的是放大系数值的显示区间,和自变量的取值范围无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:23:14