如何在R的sjPlot交互回归图中同时设置线条颜色与线型?
解决plot_model交互图中颜色与线型同步及图例标签问题
问题根源
当使用colors="bw"参数时,sjPlot会自动为分组变量同时映射灰度颜色和线型,但此时仅修改scale_color_discrete无法同步更新线型的图例标签,导致图例混乱;不设置该参数时,默认仅用颜色区分分组,无线型差异。
解决方案
手动为分组变量同时设置颜色和线型的映射,统一图例标签,具体代码如下:
# 修正主题参数拼写错误(axis.textcolor.x → axis.text.color.x) set_theme(base = theme_classic(), axis.title.color = "black", axis.text.color.x = "black", axis.text.color.y = "black") fit <- lm(Comp ~ D_Merit * Class, data = df) # 绘制基础交互图,不使用colors="bw" p1 <- plot_model(fit, type = "int", mdrt.values = "meansd", terms = c("D_Merit", "Class"), axis.title = c("Descriptive Meritocracy", "Perceived Competitiveness"), axis.lim = list(c(-2,2),c(-2,2)), title = "") # 手动添加颜色和线型映射,同步图例标签 p1 + # 自定义颜色(可按需替换) scale_color_manual(values = c("#0072B2", "#D55E00", "#009E73"), labels = c("-1 SD", "mean", "+1 SD")) + # 自定义线型(可按需替换,如solid、dashed、dotted等) scale_linetype_manual(values = c("solid", "dashed", "dotted"), labels = c("-1 SD", "mean", "+1 SD")) + # 统一图例标题与样式 guides(color = guide_legend(title = "Class"), linetype = guide_legend(title = "Class"))
关键说明
- 修正主题参数:原代码中
axis.textcolor.x和axis.textcolor.y拼写错误,应为axis.text.color.x和axis.text.color.y,否则主题设置不会生效。 - 手动映射控制:通过
scale_color_manual和scale_linetype_manual分别指定颜色和线型,确保每个分组(-1 SD、mean、+1 SD)对应唯一的颜色+线型组合。 - 图例同步:通过
guides()统一两个美学属性(color/linetype)的图例标题,使图例合并显示,避免混乱。
内容的提问来源于stack exchange,提问作者user21039236
相关产品推荐
相关产品推荐

