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

如何封装ggfortify绘制生存曲线的代码(分离数据框与列参数)

我来帮你把这个生存曲线绘制的逻辑封装成一个易用的自定义函数,这样你不用每次都重复写那些繁琐的代码啦!

自定义生存曲线绘制函数实现

下面这个函数兼容你提到的两种调用方式,还加了包依赖检查,避免因为没装包报错:

# 自定义生存曲线绘制函数
plot_survival_curve <- function(time_var, status_var, group_var, data = NULL) {
  # 检查并提示安装所需包
  if (!requireNamespace("survival", quietly = TRUE)) {
    stop("需要先安装survival包,请运行:install.packages('survival')")
  }
  if (!requireNamespace("ggfortify", quietly = TRUE)) {
    stop("需要先安装ggfortify包,请运行:install.packages('ggfortify')")
  }
  
  # 处理两种数据传入模式
  if (is.null(data)) {
    # 模式1:直接传入变量向量(比如 ovarian$futime 这类形式)
    surv_obj <- survival::survfit(survival::Surv(time_var, status_var) ~ group_var)
  } else {
    # 模式2:传入数据框+列名(支持裸变量名或字符串)
    # 用rlang处理非标准求值,兼容两种列名传入方式
    time_var <- rlang::ensym(time_var)
    status_var <- rlang::ensym(status_var)
    group_var <- rlang::ensym(group_var)
    
    surv_obj <- survival::survfit(
      survival::Surv(!!time_var, !!status_var) ~ !!group_var,
      data = data
    )
  }
  
  # 生成并返回ggplot格式的生存曲线
  p <- ggfortify::autoplot(surv_obj)
  return(p)
}
参数说明
  • time_var:生存时间变量,可以是直接的向量(比如ovarian$futime),或者数据框中的列名(配合data参数使用)
  • status_var:结局状态变量(通常0代表截尾,1代表事件发生),传入规则同上
  • group_var:分组变量,用来区分不同组的生存曲线,传入规则同上
  • data:可选参数,当你传入列名而非向量时,指定对应的数据集
用法示例

示例1:对应原方式1(直接传变量向量)

# 先加载所需包(函数里会检查,但提前加载也没问题)
library(survival)
library(ggfortify)

# 调用函数,直接传入ovarian的列向量
curve1 <- plot_survival_curve(
  time_var = ovarian$futime,
  status_var = ovarian$fustat,
  group_var = ovarian$resid.ds
)
# 展示图形
print(curve1)

示例2:对应原方式2(分离数据框与列名)

# 调用函数,指定data参数,传入列名
curve2 <- plot_survival_curve(
  time_var = futime,
  status_var = fustat,
  group_var = resid.ds,
  data = ovarian
)
# 展示图形
print(curve2)
额外扩展:修改图形样式

因为函数返回的是标准ggplot对象,你可以用ggplot的语法随意调整样式,比如加标题、修改坐标轴标签:

curve2 +
  ggplot2::ggtitle("卵巢癌患者按残留病灶分组的生存曲线") +
  ggplot2::xlab("生存时间(天)") +
  ggplot2::ylab("累积生存率") +
  ggplot2::theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:51:15