2016-07-12 75 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) 

運行此兩次會給兩套不同顏色組分配的,而且我不希望那。爲了與報告中的其他圖形保持一致,我需要組始終以相同的顏色顯示。

注意:我發現顏色的顯示順序與生存數據相關聯,但我無法弄清楚如何強制顏色分配。

任何幫助表示讚賞!

回答

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)