PAYATHON 2026

ggsurvfit 添加风险表后如何固定 y 轴标题位置?

数据小许

结论

可以继续使用 ggsurvfit 和 add_risktable()。现有答复没有提供原生选项,让 y 轴标题在组合图中自动贴近主图坐标轴。一个可行的处理方法是隐藏默认标题,再用 annotation_custom() 在主图绘图区左侧添加旋转文字。偏移量需要根据图形尺寸调整。

原因

add_risktable() 会将风险表与生存曲线组合显示。相关答复指出,这种组合布局使用了 patchwork,y 轴标题可能落在组合图左侧的公共区域,与上方主图的 y 轴相距较远。问题中的代码用 labs(y = "Cumulative incidence") 设置主图标题;添加风险表后,标题向左偏移。

处理步骤

在主图中添加 annotation_custom() 和 grid::textGrob(),将 y 轴标题放在绘图区左侧。使用 coord_cartesian(clip = "off") 允许文字显示在绘图区外,再通过 labs(y = NULL) 隐藏原标题:

fit |>
  ggsurvfit(type = "risk", linetype_aes = TRUE) +
  annotation_custom(
    grid::textGrob(
      x = grid::unit(0, "npc") - grid::unit(30, "pt"),
      label = "Cumulative incidence",
      rot = 90,
      vjust = 0
    )
  ) +
  coord_cartesian(clip = "off") +
  add_risktable(risktable_stats = "{n.risk}") +
  scale_color_manual(values = c("black", "#DE9043")) +
  scale_linetype_manual(values = c("solid", "dashed")) +
  labs(x = "Months", y = NULL)

这里假设 fit 已经是可用于 ggsurvfit() 的拟合对象。代码中的 30 pt 仅作定位示例。标题位置不合适时,可以调整这个值,并在最终导出的图像尺寸下检查效果。

注意事项

annotation_custom() 通过手动定位添加文字,不会改变 ggplot 的 y 轴标题布局。标题长度、字号、图形宽度或导出尺寸变化后,可能需要重新调整偏移量。原问题没有提供完整的初始绘图代码和可复现数据,因此示例沿用了后续补充的 fit、风险表和标签设置。实际使用时,还应检查文字是否被裁切或与风险表重叠。

相关问题答复及示例:Stack Overflow:ggsurvfit + add_risktable 后 y 轴标题偏移。

备注:内容仅供参考。