使用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
相关产品推荐
相关产品推荐

