Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove variable name from legend in ggsurvplot

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

like image 950
otwtm Avatar asked Sep 01 '26 05:09

otwtm


2 Answers

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

like image 193
jay.sf Avatar answered Sep 02 '26 21:09

jay.sf


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

like image 27
TJ87 Avatar answered Sep 02 '26 21:09

TJ87



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!