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

如何调整interactions包sim_slopes生成的Johnson-Neyman图?

解决interactions包sim_slopes绘图报错及外观调整问题

报错原因

你之前的代码报错是因为mod是lm()拟合的线性模型对象,它没有plot元素,直接调用mod$plot会返回NULL,和ggplot语法结合自然触发“binary column operator has non-numeric arguments”错误。正确做法是先把sim_slopes()的运行结果保存为对象,这个对象才包含可修改的ggplot绘图对象。

完整解决方案代码

library(interactions)
library(ggplot2)

# 1. 拟合线性模型
mod <- lm(sorry ~ preciseage*group, data = RAWdata)

# 2. 运行sim_slopes并保存结果,同时关闭观测数据范围线
sim_result <- sim_slopes(mod, 
                         pred = group, 
                         modx = preciseage, 
                         jnplot = TRUE, 
                         confint = TRUE,
                         show_data_range = FALSE) # 直接关闭那条粗黑线

# 3. 调整图表外观
custom_jn_plot <- sim_result$plot +
  # 修改标题、横纵轴标签
  labs(title = "自定义Johnson-Neyman图",
       x = "你的X轴标题",
       y = "你的Y轴标题") +
  # 调整X轴刻度(根据数据实际范围修改breaks参数)
  scale_x_continuous(breaks = seq(18, 80, 5)) +
  # 调整Y轴刻度(根据数据实际范围修改breaks参数)
  scale_y_continuous(breaks = seq(-1, 3, 0.5))

# 4. 展示调整后的图表
print(custom_jn_plot)

各需求的针对性说明

  • 修改横纵轴标题:通过ggplot2的labs()函数直接设置x、y参数,也可以用xlab()、ylab()单独设置。
  • 调整横纵轴刻度:用scale_x_continuous()和scale_y_continuous()的breaks参数指定刻度值,比如seq(18,80,5)表示从18到80、每5个单位一个刻度,可根据自身数据范围修改。
  • 删除“Range of observed data”粗黑线:在sim_slopes()中添加show_data_range = FALSE参数,就能直接关闭这条线;如果已生成绘图对象,也可通过sapply(sim_result$plot$layers, function(x) class(x$geom)[1])找到对应图层后,用sim_result$plot$layers <- sim_result$plot$layers[-索引]删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:10:24