使用ggsurvfit包调整X轴时避免截断风险表的方法
解决ggplot调整X轴后风险表第一列被遮挡的问题
方法1:调整X轴扩展参数,预留左侧空间
问题根源是scale_x_continuous(expand=c(0, 1))将X轴左侧扩展设为0,导致风险表第一列没有足够显示空间。只需给左侧保留少量扩展空间即可:
library(tidyverse) library(ggsurvfit) p <- survfit2(Surv(time, status) ~ sex, data = df_lung) %>% ggsurvfit(linewidth = 1) + scale_ggsurvfit() + add_risktable(risktable_stats = c("n.risk")) + theme_classic()+ scale_x_continuous(expand=c(0.05, 1), limits = c(0, 34), breaks = seq(0, 30, 6)) p
expand的第一个参数可根据实际显示效果调整,比如0.03、0.06等。
方法2:自定义风险表左侧边距
若必须保持X轴左侧无扩展,可通过add_risktable的table_theme参数单独调整风险表的内边距:
library(tidyverse) library(ggsurvfit) p <- survfit2(Surv(time, status) ~ sex, data = df_lung) %>% ggsurvfit(linewidth = 1) + scale_ggsurvfit() + add_risktable( risktable_stats = c("n.risk"), table_theme = theme( table.margin.left = unit(10, "pt") # 增大左侧边距,数值按需修改 ) ) + theme_classic()+ scale_x_continuous(expand=c(0, 1), limits = c(0, 34), breaks = seq(0, 30, 6)) p
方法3:用coord_cartesian设置X轴显示范围
scale_x_continuous(limits=...)会过滤超出范围的数据,可能影响风险表布局。改用coord_cartesian(xlim=...)仅放大指定区域,不截断数据:
library(tidyverse) library(ggsurvfit) p <- survfit2(Surv(time, status) ~ sex, data = df_lung) %>% ggsurvfit(linewidth = 1) + scale_ggsurvfit() + add_risktable(risktable_stats = c("n.risk")) + theme_classic()+ scale_x_continuous(expand=c(0, 1), breaks = seq(0, 30, 6)) + coord_cartesian(xlim = c(0, 34)) p
内容的提问来源于stack exchange,提问作者Kamil
相关产品推荐
相关产品推荐

