2016-07-12 3 views
1

Я хотел бы иметь полный контроль над цветами, используемыми для отображения групповых графов, используя ggsurv. Вы найдете ниже пример игрушек воспроизвести то, что я видел (в основном взяты из there):Как назначить цвета группам в графах выживаемости

require(data.table) 

# Function to create synthetic survival data 
simulWeib <- function(N, lambda, rho, beta, rateC) 
{ 
    # covariate --> N Bernoulli trials 
    x <- sample(x=c(0, 1), size=N, replace=TRUE, prob=c(0.5, 0.5)) 

    # Weibull latent event times 
    v <- runif(n=N) 
    Tlat <- (- log(v)/(lambda * exp(x * beta)))^(1/rho) 

    # censoring times 
    C <- rexp(n=N, rate=rateC) 

    # follow-up times and event indicators 
    time <- pmin(Tlat, C) 
    status <- as.numeric(Tlat <= C) 

    # data set 
    data.frame(id=1:N, 
      time=time, 
      status=status, 
      x=x) 
} 

set.seed(1234) 
nbGroups <- 7 
dat <- list() 
for(k in 1:nbGroups) 
{ 
    dat.onegp <- simulWeib(N=10, lambda=0.01, rho=1, beta=-0.6, rateC=0.001) 
    # fit <- coxph(Surv(time, status) ~ x, data=dat.onegp) 
    dat.onegp <- mutate(dat.onegp, Group = paste0("G",k)) 
    dat[[k]] <- dat.onegp 
} 

dat.df <- rbindlist(dat) 
dat.df.survCurv <- survfit(Surv(dat.df$time, dat.df$status) ~ dat.df$Group) 
# Vector with colors to be used 
cols = colorRampPalette(brewer.pal(9, "Set1"))(nbGroups) 

ggsurv(dat.df.survCurv, size.est = 1) + 
    guides(linetype = FALSE) + 
    scale_colour_manual(name = "Exp. groups", breaks = sort(dat.df$Group), values = cols) 

Запуск этого два раза даст два различных набора присвоения цветовой группы, и я не хочу что. Мне нужно, чтобы группы всегда отображались с одинаковым цветом, для согласованности с другими графиками в отчете.

NB: Я выяснил, что порядок отображения цветов связан с данными о выживании, но я не могу понять, как принудительно назначить цвет.

Любая помощь приветствуется!

ответ

0

Найдено this post! Решением является использование limits вместо breaks

ggsurv(dat.df.survCurv, size.est = 1) + 
    guides(linetype = FALSE) + 
    scale_colour_manual(name = "Exp. groups", limits = sort(dat.df$Group), values = cols)