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