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

如何修改Schoenfeld残差图的Y轴标题为变量标签名?

修改Schoenfeld残差图Y轴标题的实现方法

完全可以实现,核心思路是给变量设置标签属性,再替换图中默认的Y轴标题,具体步骤如下:

1. 给数据框变量添加标签

先给目标变量设置对应的标签,两种方式可选:

方式一:使用labelled包(推荐)

library(labelled)
# 给变量赋值标签
var_label(md$exposure) <- "Mortality"
var_label(md$PROBLEMUse) <- "Problematic Substance Use"

方式二:直接设置变量属性

无需额外包,直接给变量添加label属性:

attr(md$exposure, "label") <- "Mortality"
attr(md$PROBLEMUse, "label") <- "Problematic Substance Use"

2. 生成并修改残差图

先生成初始的Schoenfeld残差图,再遍历每个子图替换Y轴标题:

# 拟合模型并生成zph对象
mod.full <- coxph(Surv(Time, outcome) ~ exposure + ., md)
zph_obj <- cox.zph(mod.full)

# 生成初始图
p <- ggcoxzph(zph_obj, point.size = 1, ggtheme = theme_classic() + customization_sr)

# 遍历每个子图,替换Y轴标题
p$plots <- lapply(p$plots, function(sub_plot) {
  # 提取当前标题中的变量名
  current_y_title <- sub_plot$labels$y
  var_name <- sub("Beta\\(t\\) for (.*)", "\\1", current_y_title)
  
  # 获取变量标签,没有标签则保留原变量名
  var_label <- attr(md[[var_name]], "label")
  if (is.null(var_label)) var_label <- var_name
  
  # 更新Y轴标题
  sub_plot + ylab(paste0("Beta(t) for ", var_label))
})

# 显示修改后的图
print(p)

原理说明

ggcoxzph返回的是包含多个子图的列表对象,每个子图的Y轴标题默认基于变量名生成。通过提取标题中的变量名,匹配提前设置的变量标签,就能将标题替换为你需要的自定义文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:37:17