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

如何在surv_miner的Kaplan-Meier风险表中实现文本换行?

解决Kaplan-Meier风险表文本换行的问题

我刚好处理过类似的需求,其实可以通过自定义风险表的文本格式化函数,结合survminer的主题设置来实现「数字在上、百分比在下」的换行效果,完美适配表格宽度。下面是具体的实现步骤和代码示例:

1. 准备基础环境与模型

首先加载所需包并拟合生存模型(这里用内置的lung数据集做示例):

library(survival)
library(survminer)
library(stringr)
library(ggtext) # 用于更好地支持换行文本渲染

# 拟合Kaplan-Meier模型
fit <- survfit(Surv(time, status) ~ sex, data = lung)

2. 自定义文本格式化函数

写一个函数,把风险表里默认的「数字 (百分比)」格式,替换成带换行符的「数字\n(百分比)」:

# 格式化风险表文本:拆分数字和百分比到两行
format_risk_text <- function(text) {
  # 用正则匹配数字+空格+(百分比),替换为数字换行+(百分比)
  str_replace(text, "(\\d+)\\s*\\((.*?)\\)", "\\1\n(\\2)")
}

3. 绘制带换行风险表的KM曲线

在ggsurvplot中,通过risk_table_args应用格式化函数,再用risk.table.theme配置文本渲染支持换行:

ggsurvplot(
  fit,
  data = lung,
  risk.table = TRUE,          # 显示风险表
  risk.table.col = "strata",  # 按分组着色
  risk.table.width = 0.3,     # 调整风险表宽度(按需修改)
  
  # 配置风险表主题:用element_markdown支持换行文本
  risk.table.theme = theme(
    text = element_markdown(lineheight = 1.2),
    axis.text.y = element_markdown(lineheight = 1.2)
  ),
  
  # 应用自定义的文本格式化函数到风险表
  risk_table_args = list(
    fun = format_risk_text
  )
)

关键细节说明

  • 为什么用ggtext::element_markdown?因为默认的element_text对换行的渲染不够稳定,element_markdown能更好地识别\n换行符,同时还支持简单的markdown格式(如果后续有其他格式需求)。
  • 如果不想额外加载ggtext,也可以直接用element_text并设置lineheight,同样能实现换行效果:
    risk.table.theme = theme(
      text = element_text(lineheight = 1.2),
      axis.text.y = element_text(lineheight = 1.2)
    )
    
  • 可以通过调整risk.table.width参数,进一步优化风险表的宽度,让换行后的内容更美观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:42:08