我想使用 sjPlot 中的plot_model 在 R 中绘制多级模型的结果,特别是为了说明交互效应。我想使用特定的配色方案,并且还想标记图例的三个级别(低、中、高)。但是,当我尝试执行这两件事时,阴影会恢复为默认配色方案。
这是我使用 merTools 数据集尝试过的可重现示例。
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"),
colors= colors, legend.title = "Mean SES")+
labs(y="SES", x="Mean SES",
linetype = "meanses") +
scale_color_manual(labels = c("Low (-1 SD)", "Average", "High (+1 SD)"), values=colors)
p1
这给我带来了消息“颜色比例已经存在。 添加另一个颜色比例,这将取代现有的比例。”
如果我省略了scale_color_manual代码,我会得到我想要的颜色,但不会得到我想要的图例标签。
要为
color
和 fill
美学添加标签并应用颜色,请将 aesthetics = c("color", "fill")
添加到 scale_color_manual
。
使用基于
?lme4::lmer
中的默认示例的最小可重现示例:
library(lme4)
#> Loading required package: Matrix
library(sjPlot)
library(ggplot2)
colors <- c("red", "darkred", "pink")
sleepstudy$foo <- rep(LETTERS[1:3], each = 60)
m1 <- lmer(Reaction ~ Days + Days * foo + (Days | Subject), sleepstudy)
p1 <- plot_model(m1,
type = "pred", terms = c("Days", "foo"),
colors = colors, legend.title = "Mean SES"
) +
labs(
y = "SES", x = "Mean SES",
linetype = "meanses"
) +
scale_color_manual(
labels = c("Low (-1 SD)", "Average", "High (+1 SD)"), values = colors,
aesthetics = c("color", "fill")
)
#> Scale for colour is already present.
#> Adding another scale for colour, which will replace the existing scale.
p1