Есть несколько способов сделать это, но одно предложение - тоже составьте два имеющихся у вас графика и расположите их на grid.arrange
.Сначала сделайте два участка.Затем вытащите таблицу рисков и построите график отдельно для первого графика (вы не можете поместить объект ggsurvplot в grid.arrange
).Вложите второй участок в сюжет один с аннотацией_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
)