如何修改emmeans包中交互作用图的样式与标签?
SEM交互作用图样式修改方案
问题背景
已成功复现SEM交互作用绘图代码,但尝试修改样式(将边际点标签从0/1替换为"male"/"female"、设置黑白配色、调整线条类型)时无效果,原失效修改代码如下:
emmip(em.mass, male ~ birth_year, col = c(1,1), lty= (1,5))
解决方案
1. 替换边际点标签
需先修改emmeans对象中male变量的因子水平,将原数值型标签替换为目标文本:
# 调整emmGrid对象中的因子水平与标签 em.mass@grid$male <- factor(em.mass@grid$male, levels = c(1, 0), labels = c("male", "female"))
2. 黑白配色与线条类型调整
emmip默认生成ggplot2图形,直接传递col/lty参数无法生效,需通过ggplot2的图层函数统一修改样式:
# 加载ggplot2库(若未加载) library(ggplot2) # 绘图并设置样式 emmip(em.mass, male ~ birth_year) + scale_color_manual(values = c("black", "black")) + # 统一黑白配色 scale_linetype_manual(values = c(1, 5)) + # 设置线条类型(实线/长虚线) labs(color = "性别", linetype = "性别") # 自定义图例标题(可选)
完整修改后代码
library(emmeans) library(semTools) library(ggplot2) # 拟合SEM模型 mod <- 'mass ~ height + human + male + birth_year + male:birth_year' fit <- sem(mod, data = sw2, missing = "fiml.x") # 计算边际均值 BYrange <- range(sw2$birth_year, na.rm = TRUE) em.mass <- emmeans(fit, specs = ~ birth_year | male, at = list(male = 1:0, birth_year = BYrange), lavaan.DV = "mass") # 修改因子标签 em.mass@grid$male <- factor(em.mass@grid$male, levels = c(1, 0), labels = c("male", "female")) # 绘制交互作用图并调整样式 emmip(em.mass, male ~ birth_year) + scale_color_manual(values = c("black", "black")) + scale_linetype_manual(values = c(1, 5)) + labs(color = "性别", linetype = "性别")
内容的提问来源于stack exchange,提问作者noone
相关产品推荐
相关产品推荐

