如何在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
相关产品推荐
相关产品推荐

