字符串将文本数据包装在gregplot2的surv_miner中的风险表中

时间:2018-04-21 19:07:44

标签: r ggplot2 survival-analysis

我在RStudio中使用surv_miner构建的Kaplan Meier曲线有以下风险表:

Kaplan Meier curve

我想将风险表中的文本换行,以便数字位于顶部,百分比(括号内)位于数字下方的另一行,以便它们都适合表格。我尝试使用stringr包,但我不太清楚如何将其合并到主题中。任何帮助,将不胜感激。我发布了我的代码,因为添加实际的生存数据有点棘手。但是,如果需要实际数据,我会发布一些虚拟数据。提前谢谢。

require("survival")
require("ggplot2")
require("survminer")

fit <- survfit(Surv(Time, Survival) ~ Gender_bin, data = d)
ggsurvplot(fit,
           data = d, 
           pval = TRUE,
           legend.title = "Gender", legend.labs = c("Male", "Female"),
           xlab="Time (years)", ylab="Survival", 
           ggtheme = 
             theme_bw() + 
             theme(plot.title = element_text(hjust = 0.5, face = "bold")) +
             theme(axis.text=element_text(size=14), axis.title=element_text(size=16), axis.title.x=element_blank()) +
             theme(legend.background = element_rect(fill="gray95", size=.5), 
                   legend.text=element_text(size=14), legend.title=element_text(size=14)) +
             theme(aspect.ratio=1),
           xlim = c(0,10), 
           break.time.by = 2.5, 
           legend = c(0.9,0.8),
           risk.table = "abs_pct",
           fontsize = 3.5,
           tables.theme = theme_bw() + theme(aspect.ratio = 0.14) + 
             theme(axis.text=element_text(size=14), axis.title=element_text(size=14)) +
             theme(axis.title.y=element_blank()) +
             theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()))

surv_median(fit)$median

1 个答案:

答案 0 :(得分:1)

得到一些黑客显然工作。决定使用您在ggsurvplot的示例部分中使用的数据集提供的代码。搜索了一个打印括号中的数字和百分比的部分。看着:

? ggsurvtable   # the help page
ggsurvtable    # the code
# noticed a call to .plot_survtable(...) assumed it was not exposed for viewing
getAnywhere(.plot_survtable)
# found a section that looked like it would do the work:
else if (survtable == "risk.table") {
    pct.risk <- abs_pct.risk <- n.risk <- NULL
    llabels <- switch(risk.table.type, percentage = round(survsummary$n.risk * 
        100/survsummary$strata_size), abs_pct = paste0(survsummary$n.risk, 
        " (", survsummary$pct.risk, ")"), nrisk_cumcensor = paste0(survsummary$n.risk, 
        " (", survsummary$cum.n.censor, ")"), nrisk_cumevents = paste0(survsummary$n.risk, 
        " (", survsummary$cum.n.event, ")"), survsummary$n.risk)
    survsummary$llabels <- llabels
    mapping <- aes(x = time, y = rev(strata), label = llabels, 
        shape = rev(strata))
}

然后我复制了代码并在每个代码前面分配了一个带有“\ n”而不是“”的编辑版本“(”因为计数是第一个而pct是第二个。

 .plot_survtable <- 
    # the copied and modified code went here

然后我尝试分配正确的环境:

environment(.plot_survtable) <- environment(ggsurvplot)

测试。无法按预期执行,因此检查了环境分配,发现我可能需要使用assignInNamespace代替environment<-

 getAnywhere(.plot_survtable)
#2 differing objects matching ‘.plot_survtable’ were found
#in the following places
#  .GlobalEnv
#  namespace:survminer
#Use [] to view one of them
 ?assignInNamespace   # to check the argument list and their types
 assignInNamespace('.plot_survtable', .plot_survtable, "survminer" )

再次测试,现在声称成功!!

enter image description here

因为我使用了一个具有不同时间尺度(天或月)的对象,因此我使用了您的代码(以年为单位)来限制。