如何修改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
相关产品推荐
相关产品推荐

