R:Survminer双图

时间:2018-11-13 20:08:40

标签: r survival-analysis

我参与了一个项目,其中我们绘制了事件发生率极低的事件的生存曲线,而Kaplan-Meier曲线(使用survminer绘制)非常平坦。我不想简单地将Y轴放大,因为我认为读者可能会误解发病率。同时显示“真实”率和放大最终微小差异的一种方法是像NEJM那样进行:

https://www.nejm.org/na101/home/literatum/publisher/mms/journals/content/nejm/2011/nejm_2011.364.issue-9/nejmoa1007432/production/images/img_large/nejmoa1007432_f1.jpeg

但是,我还没有在survminer中找到直接执行此操作的方法。出于可复制性考虑,我希望避免使用任何Adobe软件。

有人知道原始图的顶部包含一个小的放大版本的方法吗?我想使用survminer完成此操作,但不胜感激任何其他基于ggplot的良好KM软件包的提示。

小例子:

library(survival)
library(survminer)

df <- genfan
df$treat<-sample(c(0,1),nrow(df),replace=TRUE)
fit <- survfit(Surv(hours, status) ~ treat, data = df)

p <- ggsurvplot(fit, data = df, risk.table = TRUE, fun = 'event', ylim = c(0, 1))
p # Normal flat, singular graph

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点,但是有一个建议就是同时绘制两个图并用grid.arrange进行排列。首先绘制两个图。然后拉出风险表并为第一个图单独绘制(您不能将ggsurvplot对象放在grid.arrange中)。将第二个图嵌套在带有标注注记的图一中。最后,使用layout_matrix指定图的尺寸,并将其与grid.arrange放回原处。

library(survival)
library(survminer)
library(grid)
library(gridExtra)

df <- genfan
df$treat<-sample(c(0,1),nrow(df),replace=TRUE)
fit <- survfit(Surv(hours, status) ~ treat, data = df)

p <- ggsurvplot(fit, data = df, risk.table = TRUE, fun = 'event', ylim = c(0, 1))
#zoomed plot and remove risk table
g <- ggsurvplot(fit, data = df, risk.table = FALSE, fun = 'event', ylim = c(0, .5))

risktab <- p$table

justplot <- p$plot

p2 <- justplot + 
      annotation_custom(grob = ggplotGrob(g$plot+
                            theme(legend.position = "none")),
                             xmin = 60,xmax=Inf,ymin = .5,ymax = Inf)

lay <- rbind(c(1,1),
             c(1,1),
             c(2,2))

gridExtra::grid.arrange(p2, risktab,
                        #use layout matrix to set sizes
                        layout_matrix=lay
)

enter image description here