我参与了一个项目,在这个项目中,我们正在为一个发病率很低的事件绘制生存曲线,而Kaplan曲线(用survminer绘制)是相当平坦的。我不想简单地放大Y轴,因为我认为发病率可能会被读者误解。一种既显示“真实”比率又放大最终微小差异的方法之一是像NEJM那样:
但是,我还没有找到在survminer中直接这样做的方法。为了可重现性起见,我想避免涉及任何Adobe软件。
有没有人知道如何获得一个小的,放大的版本,包括在原来的图表之上?我想用survminer来完成这个任务,但是对于任何其他好的基于ggplot包的提示都是非常感谢的。
小例子:
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发布于 2018-11-14 14:39:50
有几种方法可以做到这一点,但有一个建议是,将您拥有的两个地块安排在grid.arrange中。首先制作这两个情节。然后,为第一个图分别提取风险表和图(不能在grid.arrange中放置ggsurvplot对象)。在地块中嵌套第二个地块,第一个用annotation_custom。最后,使用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
)

https://stackoverflow.com/questions/53288724
复制相似问题