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

