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

如何修改ggsurvplot风险表中小于5的数值为<5?

解决survminer风险表修改后不生效的问题

直接修改p$table$data不会生效,因为ggsurvplot返回的p$table是已构建完成的ggplot对象,绘图时实际调用的数据存储在图层(layers)中,而非顶层的data属性。以下是两种可行的解决方法:

方法一:直接修改ggplot图层的数据

这是最简便的方式,直接定位到风险表图层的数据源进行修改:

library(survival)
library(survminer)

fit <- survfit(Surv(time, status) ~ sex, data = lung)

p <- ggsurvplot(fit, data = lung, risk.table = TRUE)

# 直接修改风险表图层中的llabels字段
p$table$layers[[1]]$data$llabels <- ifelse(
  p$table$layers[[1]]$data$llabels < 5, 
  "<5", 
  as.character(p$table$layers[[1]]$data$llabels)
)

# 查看修改后的结果
p

原理:ggplot对象的图层数据(layers[[1]]$data)才是绘图时真正读取的数据源,修改这个位置的内容会直接反映到最终图形中。

方法二:手动生成并自定义风险表

如果需要更灵活的自定义(比如调整样式、添加额外元素),可以手动生成风险表数据后重新绘制,再与生存曲线组合:

library(survival)
library(survminer)
library(ggplot2)
library(gridExtra)

fit <- survfit(Surv(time, status) ~ sex, data = lung)

# 先绘制不含风险表的生存曲线
p_surv <- ggsurvplot(fit, data = lung, risk.table = FALSE)$plot

# 获取标准风险表数据
risk_data <- get_ggsurvplot_risk_table(fit = fit, data = lung)
# 修改小于5的数值为"<5"
risk_data$llabels <- ifelse(risk_data$llabels < 5, "<5", as.character(risk_data$llabels))

# 重新绘制风险表
p_risk <- ggplot(risk_data, aes(x = time, y = strata, label = llabels)) +
  geom_text(size = 3.5, hjust = 0.5) +
  theme_minimal() +
  theme(
    axis.title = element_blank(),
    axis.text.x = element_text(angle = 45, hjust = 1),
    panel.grid = element_blank(),
    axis.ticks = element_blank()
  )

# 组合生存曲线和风险表
ggarrange(p_surv, p_risk, ncol = 1, heights = c(3, 1))

这种方式完全可控,适合需要对风险表样式做深度调整的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:27:07