5

Is there a concise way to remove the variable name in the legend of plots created by ggsurvplot? Example:

library(survival)
library(survminer)

set.seed(123)
df=data.frame(gender=c(rep("male", 10), rep("female", 10)), value=c(rnorm(10,mean = 2), rnorm(10,mean = 3)))
fit = surv_fit(Surv(value) ~ gender, data = df)
p = ggsurvplot(fit, data = df,  surv.median.line = "none") 

enter image description here

What I want is to remove the word 'gender' from the legend as in the following plot. I can achieve this by manually setting the legend labels:

p = ggsurvplot(fit, data = df,  surv.median.line = "none", legend.labs = c("male", "female")) 

But is there a better way?

EDIT: I accidentally swapped male and female when I manually assigned the gender (2. plot), which shows how dangerous this method is.

enter image description here

otwtm
  • 1,779
  • 1
  • 16
  • 27

3 Answers3

6

Hack the strata with gsub.

names(fit$strata) <- gsub("gender=", "", names(fit$strata))
ggsurvplot(fit, data=df, surv.median.line="none")

enter image description here

jay.sf
  • 60,139
  • 8
  • 53
  • 110
  • 1
    Works fine, thanks a lot! Even though I was hoping for an option included by the makers of the package. – otwtm May 12 '20 at 09:15
4

To avoid the mistake of swapping the legend labels, use this option in the ggsurvplot function instead: legend.labs = levels(df$gender)

TJ87
  • 404
  • 1
  • 3
  • 13
0

you can simply change the attribute of strata

attr(fit$strata,'names') <- c('female', 'male')

and then make the plot

p = ggsurvplot(fit, surv.median.line = "none") 
efz
  • 425
  • 4
  • 9