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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:50:18