首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: Survminer双图

R: Survminer双图
EN

Stack Overflow用户
提问于 2018-11-13 20:08:39
回答 1查看 1K关注 0票数 0

我参与了一个项目,在这个项目中,我们正在为一个发病率很低的事件绘制生存曲线,而Kaplan曲线(用survminer绘制)是相当平坦的。我不想简单地放大Y轴,因为我认为发病率可能会被读者误解。一种既显示“真实”比率又放大最终微小差异的方法之一是像NEJM那样:

f1.jpeg

但是,我还没有找到在survminer中直接这样做的方法。为了可重现性起见,我想避免涉及任何Adobe软件。

有没有人知道如何获得一个小的,放大的版本,包括在原来的图表之上?我想用survminer来完成这个任务,但是对于任何其他好的基于ggplot包的提示都是非常感谢的。

小例子:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 14:39:50

有几种方法可以做到这一点,但有一个建议是,将您拥有的两个地块安排在grid.arrange中。首先制作这两个情节。然后,为第一个图分别提取风险表和图(不能在grid.arrange中放置ggsurvplot对象)。在地块中嵌套第二个地块,第一个用annotation_custom。最后,使用layout_matrix指定绘图的维度,并将其与grid.arrange放在一起。

代码语言:javascript
复制
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
)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53288724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档