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

如何移除sjPlot交互回归图中rank2对应的回归直线

解决sjPlot交互图移除指定类别线条的问题

方法1:重新拟合仅包含目标类别的模型

直接从数据层面筛选出var1为rank1和rank3的观测,再重新拟合模型,绘图时自然只会生成这两个类别的交互直线:

# 过滤数据,仅保留rank1和rank3
mydata_filtered <- mydata[mydata$var1 %in% c("rank1", "rank3"), ]
# 重新拟合回归模型
model_filtered <- lm(score ~ var1 + var2 + var3 + var4 + var1*var2, data = mydata_filtered)
# 绘制交互图
plot1 <- plot_model(model_filtered, type = "int", ci.lvl = NA, title = "", legend.title = "",
                    axis.title = c("var2", "score"))

方法2:在生成的ggplot对象中过滤线条

如果不想重新拟合模型,可以利用plot_model返回ggplot对象的特性,直接过滤掉rank2对应的线条和图例项:

library(ggplot2)
library(dplyr)

# 原有代码生成绘图对象
model <- lm(score ~ var1 + var2 + var3 + var4 + var1*var2, data = mydata)
plot1 <- plot_model(model, type = "int", ci.lvl = NA, title = "", legend.title = "",
                    axis.title = c("var2", "score"))

# 过滤rank2的线条并更新图例
plot1_filtered <- plot1 +
  # 覆盖原有线条,只保留rank1和rank3的组
  geom_line(data = filter(plot1$data, group != "var1rank2")) +
  # 更新颜色和线型图例,仅保留目标类别
  scale_color_discrete(breaks = c("var1rank1", "var1rank3")) +
  scale_linetype_discrete(breaks = c("var1rank1", "var1rank3"))

两种方法对比:

  • 方法1更严谨,模型仅包含需要分析的类别,适合需要基于过滤后数据做后续分析的场景;
  • 方法2保留原模型完整性,仅调整可视化结果,适合快速修改绘图展示的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:35:25