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

如何将配对生存差异分析的p值表格添加至生存曲线图?

问题描述

用户执行了以下R代码进行生存分析并绘制生存曲线:

library(survival)
library(survminer)
data(aml)
aml$x <- as.character(aml$x)
aml[10,3] <- 'SuperMaintained'
aml[11,3] <- 'SuperMaintained'
aml[22,3] <- 'SuperMaintained'
aml[23,3] <- 'SuperMaintained'
aml$x <- factor(aml$x, levels = c('Nonmaintained','Maintained','SuperMaintained'))

fit <- survfit(Surv(time, status) ~ x, data = aml)

ggsurvplot(fit, conf.int = FALSE, surv.median.line = c('hv'), data = aml,  pval = TRUE, risk.table = FALSE)

res=pairwise_survdiff(Surv(time, status) ~ x, data = aml)
res$p.value

得到的成对比较p值输出如下:

Nonmaintained   Maintained
Maintained      0.085155296     NA
SuperMaintained 0.007303126     0.0851553

请问如何将该p值表格添加到主生存曲线图中?

解决方案

试试下面两种方法把p值表格整合到生存曲线图里:

方法1:用gridExtra拼接生存图和表格

  1. 先安装并加载所需包:
install.packages("gridExtra")
library(gridExtra)
  1. 整理p值表格,优化显示格式:
# 将p值矩阵转为数据框,保留分组名并处理NA值
p_table <- as.data.frame(res$p.value)
p_table$分组 <- rownames(p_table)
# 调整列顺序,保留3位小数,NA替换为空字符串
p_table <- p_table[, c("分组", "Nonmaintained", "Maintained")]
p_table[, 2:3] <- round(p_table[, 2:3], 3)
p_table[is.na(p_table)] <- ""
  1. 将表格转为绘图对象,与生存图拼接:
# 提取ggsurvplot生成的ggplot核心对象
surv_plot <- ggsurvplot(fit, conf.int = FALSE, surv.median.line = c('hv'), 
                        data = aml, pval = TRUE, risk.table = FALSE)$plot

# 将表格转换为可嵌入绘图的对象
table_grob <- tableGrob(p_table, rows = NULL, 
                        theme = ttheme_default(base_size = 10))

# 左右拼接生存图和表格,设置宽度比例
grid.arrange(surv_plot, table_grob, ncol = 2, widths = c(3, 1))

方法2:直接在生存图空白区域嵌入表格

如果希望表格放在生存图内部(比如右上角空白处),可以使用ggplot2的annotation_custom:

library(ggplot2)

# 获取生存图的ggplot对象
surv_plot <- ggsurvplot(fit, conf.int = FALSE, surv.median.line = c('hv'), 
                        data = aml, pval = TRUE, risk.table = FALSE)$plot

# 将表格嵌入生存图,调整坐标参数适配你的图范围
surv_plot + annotation_custom(table_grob, 
                             xmin = max(aml$time)*0.6, xmax = max(aml$time),
                             ymin = 0.2, ymax = 0.8)

实用提示

  • 修改tableGrob的base_size参数可以调整表格字体大小
  • 方法2中的坐标参数(xmin/xmax/ymin/ymax)需要根据你的生存图实际范围微调,避免遮挡曲线
  • 若要美化表格样式,可以修改ttheme_default的参数,比如调整边框、背景色等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:54:09