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

ggplot2+ggsurvfit生存图问题:左侧留白与风险表间距调整

关于ggsurvfit绘制生存曲线的两个问题解决

问题1:绘图左侧留白不对称,整体偏右的原因及解决

原因

该现象由两个因素共同导致:

  • add_risktable()默认让风险表的分层标签(strata)左对齐,会占据图形左侧额外空间,拉宽了整个绘图区域的左侧边界。
  • coord_cartesian(xlim=c(0, 100))硬截断了X轴范围,但scale_x_continuous未设置对称的轴扩展参数,默认扩展规则使得X轴左右留白不一致,进一步放大了偏右的视觉效果。

解决方法

可从以下两个方向调整:

  • 调整风险表对齐方式:在add_risktable()中加入align = "right",让分层标签右对齐,减少左侧不必要的空间占用。
  • 设置X轴对称扩展:修改scale_x_continuous的expand参数为对称值,同时配合调整整体图形边距,确保左右留白一致。

修改后的关键代码片段:

scale_x_continuous(
  breaks = c(0, 25, 50, 75, 100),
  expand = c(0.02, 0) # 设置对称的X轴扩展
) +
add_risktable(
  risktable_height = 0.25,
  align = "right", # 风险表标签右对齐
  theme = 
    list(
      theme_risktable_boxed(axis.text.y.size = 11, 
                            plot.title.size = 11),
      theme(plot.title = element_text(face = "bold"))
    )
) +
theme(plot.margin = margin(10, 10, 10, 10)) # 调整整体图形边距,按需修改数值

问题2:上移风险表,缩小与绘图区及图例的间距

解决方法

通过ggsurvfit自带参数和ggplot主题设置即可实现:

  1. 缩短风险表与主图的间距:add_risktable()的gap参数(默认0.05)控制主图和风险表之间的距离,设置更小的数值(如gap=0.02)即可拉近二者。
  2. 减小图例与风险表的间距:用theme()的legend.margin减小图例底部留白,同时调整风险表主题的顶部边距,进一步缩小间距。

修改后的关键代码片段:

theme(
  legend.position = "bottom",
  legend.margin = margin(b = 3) # 减小图例底部边距
) +
add_risktable(
  risktable_height = 0.25,
  gap = 0.02, # 缩小与主图的间距
  theme = 
    list(
      theme_risktable_boxed(axis.text.y.size = 11, 
                            plot.title.size = 11),
      theme(
        plot.title = element_text(face = "bold"),
        plot.margin = margin(t = 3) # 减小风险表顶部边距
      )
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:15:03