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

使用ggsurvplot指定fun="event"时自定义y轴标签不生效如何解决?

ggsurvplot指定fun="event"时自定义ylab不生效的解决方案

问题原因

survminer包的ggsurvplot()函数内置逻辑中,当fun参数传入预设字符串(包括"event"、"cumhaz"、"pct"等)时,会自动为对应转换的y轴设置默认标签,优先级高于用户传入的ylab参数,因此自定义y轴标签会被覆盖。

解决方案

方案1:手动修改返回的绘图对象

ggsurvplot()返回的是一个列表,其中plot元素是生存曲线对应的ggplot对象,你可以直接修改该对象的y轴标签:

library(survival)
library(survminer)

# 原有测试代码
tdata <- data.frame(time  =c(1,1,1,2,2,2,3,3,3,4,4,4),
                    status=rep(c(1,0,2),4),
                    n=c(12,3,2,6,2,4,2,0,2,3,3,5))
fit  <- survfit(Surv(time, time, status, type='interval') ~1,
                data=tdata, weight=n)

myplot <- ggsurvplot(fit, xlim = c(0,60), 
                     break.x.by = 20, xlab = "Day", ylab = "Survival probability", 
                     fun = "event",
                     risk.table = "abs_pct", font.x = c(26, face = "bold"), 
                     font.y = c(26, face = "bold"), font.tickslab = c(24), 
                     font.legend = c(24), risk.table.fontsize = 7, risk.table.col = "black", size = 1) 

# 新增:手动修改生存曲线y轴标签
myplot$plot <- myplot$plot + ylab("自定义y轴标签内容")

# 若需要同步修改风险表的y轴标签,可添加以下代码
# myplot$table <- myplot$table + ylab("风险表自定义y轴标签")

# 输出绘图
myplot

方案2:传入自定义转换函数避免标签覆盖

不使用预设的"event"字符串,而是传入等价的自定义转换函数,此时不会触发默认标签覆盖逻辑,ylab参数可以正常生效:

myplot <- ggsurvplot(fit, xlim = c(0,60), 
                     break.x.by = 20, xlab = "Day", ylab = "Survival probability", 
                     # 等价于fun="event",不会触发默认标签覆盖
                     fun = function(y) 1 - y,
                     risk.table = "abs_pct", font.x = c(26, face = "bold"), 
                     font.y = c(26, face = "bold"), font.tickslab = c(24), 
                     font.legend = c(24), risk.table.fontsize = 7, risk.table.col = "black", size = 1) 

myplot

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:21:01