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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:44:59