gernophil
gernophil

Reputation: 495

ggsave ggsurvplot with risk.table

I am trying to save a ggsurvplot with risk.table using ggsave. However, the output off ggsave is always just the risk.table. I also tried this and this. None is working.

library(data.table)
library(survival)
library(survminer)

OS <- c(c(1:100), seq(1, 75, length = 50), c(1:50))
dead <- rep(1, times = 200)
variable <- c(rep(0, times = 100), rep(1, times = 50), rep(2, times = 50))

dt <- data.table(OS = OS,
                 dead = dead,
                 variable = variable)

survfit <- survfit(Surv(OS, dead) ~ variable, data = dt)

ggsurvplot(survfit, data = dt,
           risk.table = TRUE)

ggsave("test.png")

Upvotes: 2

Views: 2708

Answers (1)

stefan
stefan

Reputation: 123893

The main issue is that a ggsurvplot object is a list of plots. Hence, when using ggsave only the last plot or element of the list is saved.

There is already a GitHub issue on that topic with several workarounds, e.g. using one of the more recent suggestions this works fine for me

library(survival)
library(survminer)

OS <- c(c(1:100), seq(1, 75, length = 50), c(1:50))
dead <- rep(1, times = 200)
variable <- c(rep(0, times = 100), rep(1, times = 50), rep(2, times = 50))

dt <- data.frame(OS = OS,
                 dead = dead,
                 variable = variable)

survfit <- survfit(Surv(OS, dead) ~ variable, data = dt)

# add method to grid.draw
grid.draw.ggsurvplot <- function(x){
  survminer:::print.ggsurvplot(x, newpage = FALSE)
}

p <- ggsurvplot(survfit, data = dt, risk.table = TRUE)

ggsave("test.png", p, height = 6, width = 6)

enter image description here

Upvotes: 5

Related Questions