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

使用sjPlot的plot_model绘制多层模型时定制配色与图例标签的问题

解决sjPlot plot_model交互效应图的配色与图例标签冲突问题

问题根源在于你同时使用了plot_model的colors参数和ggplot的scale_color_manual,两者都在定义颜色刻度,后者会覆盖前者,进而导致配色异常和警告提示。以下是两种可行的解决方案:

方案1:直接用plot_model内置参数设置标签(推荐)

利用plot_model的pred.labels参数直接指定三个分组的图例标签,同时保留colors参数设置自定义配色,无需额外添加scale层,从根源避免冲突:

library(lme4)
library(sjPlot)
library(merTools)

colors <- c("red","darkred","pink")

m1 = lmer(mathach ~ ses + meanses + ses*meanses + (1|schid), data=hsb)

# 修正轴标签:原模型因变量是mathach,y轴应为数学成绩,x轴对应ses
p1 <- plot_model(m1, type="pred", terms= c("ses","meanses"), 
                 colors= colors, 
                 legend.title = "Mean SES",
                 pred.labels = c("Low (-1 SD)", "Average", "High (+1 SD)")) +
  labs(y="Math Achievement", x="SES") 

p1

pred.labels是plot_model专为连续变量自动生成的-1SD、均值、+1SD分组设计的参数,既能保留自定义颜色,又能替换图例标签,不会触发刻度冲突警告。

方案2:统一用ggplot scale控制配色与标签

如果习惯用ggplot的scale语法,就不在plot_model里设置colors参数,完全交给scale_color_manual同时定义颜色和标签:

library(lme4)
library(sjPlot)
library(merTools)

colors <- c("red","darkred","pink")

m1 = lmer(mathach ~ ses + meanses + ses*meanses + (1|schid), data=hsb)

p1 <- plot_model(m1, type="pred", terms= c("ses","meanses"), 
                 legend.title = "Mean SES") +
  labs(y="Math Achievement", x="SES") +
  scale_color_manual(labels = c("Low (-1 SD)", "Average", "High (+1 SD)"), values=colors)

p1

这种方式只生成一次颜色刻度,不会出现重复覆盖的问题,同样能得到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:01:16