如何将配对生存差异分析的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拼接生存图和表格
- 先安装并加载所需包:
install.packages("gridExtra") library(gridExtra)
- 整理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)] <- ""
- 将表格转为绘图对象,与生存图拼接:
# 提取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
相关产品推荐
相关产品推荐

