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

如何修改ggplot2中facet_wrap生成的预测图子图标题?

问题分析

你试图用facet_wrap修改子图标题但无效,核心原因是:plot(conditional_effects(...))返回的是单面板图,额外添加的facet_wrap(~., ...)不会生成有效面板标签,反而属于冗余操作。你需要直接修改现有图的标题或面板标签。

解决方案

以下是两种可行的修改方式:

方案一:在conditional_effects中直接指定标签

利用conditional_effects的LBLs参数,提前为变量设置自定义标签,生成的图会直接应用该标签:

library(ggplot2)
library(gridExtra)
library(brms)

models <- list(fit_slope, fit_vel)
plot_list <- list()

for (i in seq_along(models)) {
  model <- models[[i]]
  effect_name <- c("ksn", "velo")[i]
  # 为当前变量定义自定义标签
  custom_label <- if (effect_name == "velo") "Velo" else "ksn"
  
  pooled_effect <- conditional_effects(
    model, 
    effects = effect_name, 
    sd = TRUE,
    LBLs = setNames(custom_label, effect_name) # 命名向量绑定变量与标签
  )
  
  plot_obj <- plot(pooled_effect, points = TRUE, plot = FALSE)[[1]] +
    theme_bw()
  
  plot_list[[i]] <- plot_obj
}

grid.arrange(grobs = plot_list, ncol = 2)

方案二:直接修改ggplot对象的标签

如果LBLs参数不生效,可以直接修改生成的ggplot面板标签或添加主标题:

library(ggplot2)
library(gridExtra)
library(brms)

models <- list(fit_slope, fit_vel)
plot_list <- list()

for (i in seq_along(models)) {
  model <- models[[i]]
  effect_name <- c("ksn", "velo")[i]
  custom_title <- if (effect_name == "velo") "Velo" else "ksn"
  
  pooled_effect <- conditional_effects(
    model, 
    effects = effect_name, 
    sd = TRUE
  )
  
  plot_obj <- plot(pooled_effect, points = TRUE, plot = FALSE)[[1]] +
    theme_bw() +
    # 修改面板标签
    facet_wrap(~., labeller = labeller(. = function(x) custom_title)) +
    # 可选:添加居中的主标题
    labs(title = custom_title) +
    theme(plot.title = element_text(hjust = 0.5))
  
  plot_list[[i]] <- plot_obj
}

grid.arrange(grobs = plot_list, ncol = 2)

注:conditional_effects是brms包的函数,确保代码运行前已加载该包。

内容的提问来源于stack exchange,提问作者Sajid Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:43:27