R中ggsurvplot转换x轴为年并限制至5年的问题
解决ggsurvplot设置x轴0-5年失效的问题
问题根源
你用xscale="d_y"只是让x轴显示成年数,但绘图底层还是基于原始的天数数据计算。直接写xlim=c(0,5),程序会把它当成0-5天,自然达不到预期效果。
两种可行解决方案
方案1:提前把生存时间转成年数再拟合模型
直接修改原始数据里的生存时间单位,重新拟合后再绘图,这样xlim就能直接用年数设置:
# 把天数转成年数(用365.25适配闰年更精准) pheno$surv_year <- pheno$survalltime / 365.25 # 用转换后的年数重新拟合生存模型 sfit_year <- survfit(Surv(surv_year, event_crc) ~ ajcc, data = pheno) # 直接设置x轴范围0-5年 ggsurvplot(sfit_year, xlim = c(0,5))
方案2:修改已生成的ggplot对象调整x轴范围
如果不想重新跑模型,直接调整ggsurvplot返回的绘图对象,把xlim对应到天数的范围:
# 先画出带年数刻度的基础图 p <- ggsurvplot(sfit, xscale = "d_y") # 把x轴范围设为0到5年对应的天数(5*365.25) p$plot <- p$plot + xlim(0, 5*365.25) # 输出调整后的图 print(p)
额外提示
- 如果对精度要求不高,也可以用365代替365.25,差别很小。
- 第一种方案的好处是后续所有和x轴相关的操作都可以直接用年数,不用再换算天数。
内容的提问来源于stack exchange,提问作者Sally
相关产品推荐
相关产品推荐

