2016-11-03 2 views
0

ggplot의 ggsurv 기능에 문제가 있습니다.ggsurv 범례 및 라인 두께

범례 및 선 스타일로 모양의 순서를 제어하고 싶습니다.

나는 다른 사람이 비슷한 문제를 가지고 있지만, 내가 대체 전설의 표준 값을 예상했을 것이다 여기
library(GGally) 
library(survival) 
data(lung) 
surv1 <- survfit(Surv(time,status) ~ sex, data = lung) 
p1 <- ggsurv(surv1, lty.est=c(1,2), surv.col=c("black", "red")) 
p1 <- p1 + scale_colour_discrete(name = 'sex', breaks = c(1,2), labels=c('XX','XY')) 
p1 

로 내 문제가 표준 폐 데이터를 사용하여 솔루션

을 이해 해달라고 볼 수 있습니다

XX와 XY로. 하지만 중복 된 전설이 생깁니다. 하나는 올바른 선 속성이지만 잘못된 이름과 색상이 있습니다. 올바른 이름과 색상을 사용하지만 잘못된 라인 속성이있는 것도 있습니다. 나는 무엇을 이해하지 못하는

나는

p1 <- p1 + guides(colour = FALSE) 

를 삽입하려고 노력하지만 전설

의 잘못된 부분을 제거? 오징어의 의견에

감사 솔루션은 다음과 같습니다

library(GGally) 
library(survival) 
data(lung) 
surv1 <- survfit(Surv(time,status) ~ sex, data = lung) 
p1 <- ggsurv(surv1, lty.est=c(1,2), surv.col=c("black", "red")) 
p1 <- p1 + scale_colour_discrete(name = 'sex', breaks = c(1,2), labels=c('XX','XY')) 
p1 <- p1 + guides(linetype = F, colour = guide_legend(override.aes = list(linetype = c(2,1)))) 
p1 

나는 override.aes ​​수동으로 전설에 사용 된 선 유형을 설정하는 것이 이해할 수있다. linetype = F가 실제로하는 일을 충분히 확신 할 수는 없지만 작동합니다!

두 번째 질문입니다. 수동으로 라인의 두께를 설정하는 방법 (두 그래프와 범례에)

p1 <- p1 + geom_line(size=2) 

이 작동하지 않습니다 추가. 그것은 orignal 것들과 완전히 정렬되지 않은 못생긴 검은 선을 그립니다.

+0

감사합니다. 내 첫 번째 문제를 해결했습니다. 위에 추가했습니다. 라인 두께를 바꾸는 새로운 문제 제기 –

+0

라인은'geom_line'이 아니라'geom_step'을 사용하여 그려집니다. 그러므로'geom_step (size = 2)'는 색상을 제어하지 못할 수도 있지만 원하는 것을 할 것입니다. [이 답변] (http://stackoverflow.com/questions/39907004/how-to-put-different-symbols-in-autoplot/39908638#39908638)이 그래프를 작성하는 경우 ggplot2 코드의 모양을 보여줍니다. 모델에서'ggfortify :: fortify'를 사용한 후 "hand"를 사용하십시오. – aosmith

+0

aosmith geom_step이 올바른 것입니다. 지금 나는 정확한 라인을 가지고있다. 그러나 그들은 검은 색이고 surv.col 검은 색과 빨간색으로 지정되지 않았습니다. 나는 전에 그것을 알아 차리지 못했지만 위의 해결책은 실제로 빨강 색과 초록색과 빨간색과 검은 색이 아니 었습니다. 이상하게도 (적어도 나를 위해) geom_step 라인이 삽입 된 전설 colrs 라인은 두꺼운 흑인이지만 빨간색 녹색 계속 –

답변

1

, 그것은 여기에 같은 상황에서 다른 사람을 위해

내가 손으로 내가 원하는 것을 바꿀 수있는 곳 내 코드입니다 (나는 몰랐어요) ggfortify과 협력

if(!require(survival)){ 
    install.packages("survival") 
} 
library(survival) 

if(!require(GGally)){ 
    install.packages("GGally") 
} 
library(GGally) 

if(!require(ggplot2)){ 
    install.packages("ggplot2") 
} 
library(ggplot2) 

if(!require(ggfortify)){ 
    install.packages("ggfortify") 
} 
library(ggfortify) 


    fit <- survfit(Surv(age_at_ecg, age_at_censor, dod) ~ rs9388451, data = exom) 
    plot.data = fortify(fit) 
    p1 <- ggplot(plot.data, aes(time, surv, color = strata)) 
    p1 <- p1 + geom_point(size=0) 
    p1 <- p1 + geom_step(size=2) 
    p1 <- p1 + scale_color_manual(name = "rs9388451", labels = c('WT', 'Heterozygote', 'Homozygote'), values = c('black', 'blue', 'red')) 
    p1 <- p1 + scale_x_continuous(limits=c(30,80),breaks=seq(30,80,10)) # x ticks from 0 to 180 by 30 
    p1 <- p1 + scale_y_continuous(limits=c(0.80,1),breaks=seq(0.80,1,0.05)) 
    p1 <- p1 + xlab("Age (years)") 
    p1 <- p1 + ylab('Survival') 
    p1 <- p1 + theme(panel.background = element_rect(fill="white")) # white plot background 
    p1 <- p1 + theme(legend.key = element_rect(fill="white")) 
    p1 <- p1 + theme(axis.title.y=element_text(margin=margin(0,15,0,0))) # Add space to axis title 
    p1 <- p1 + 
     theme(axis.text=element_text(size=25,face="bold",colour="black"), axis.title=element_text(size=25,face="bold")) 
    p1 <- p1 + theme(legend.text = element_text(colour="black", size=15, face="bold")) 
    p1 <- p1 + theme(legend.title = element_text(colour="black", size=15, face="bold")) 
    p1 
3

scale_colorscale_linetype을 모두 사용하여 범례를 결합 할 수 있습니다. 두 저울의 이름과 레이블이 동일해야합니다. 색깔을 scale_color_manual에 다시 정의해야합니다.

ggsurv 개체의 변수 group을 사용하여 올바른 색과 선 종류를 설정하고 geom_step을 통해 선을 추가 할 수 있습니다. 단점은 원본의 상단에 두 번째 줄이 그려 지므로 결과가 반드시 좋지 않을 수 있다는 것입니다.

ggsurv(surv1, lty.est=c(1,2), surv.col=c("black", "red")) + 
    scale_color_manual(name = "sex", values = c("black", "red"), labels = c("XX", "YY")) + 
    scale_linetype_discrete(name = "sex", labels = c("XX", "YY")) + 
    geom_step(size = 1, aes(color = group, linetype = group)) 

ggplot2를 사용하여 "손으로"그래프를 작성할 가치가있는 충분한 요소를 변경하려는 경우가 있습니다. 모델 개체에 fortifyggfortify에서 생존 모델에 대해 수행 할 수 있습니다.aosmith의 조언을 마지막으로 인해

library(ggfortify)  
library(ggplot2)   
plot.data = fortify(surv1, surv.connect = TRUE) 

ggplot(plot.data, aes(time, surv, color = strata)) + 
    geom_step(aes(linetype = strata), size = 1) + 
    geom_point(data = subset(plot.data, n.censor > 0), shape = 3, color = "red") + 
    scale_color_manual(name = "sex", labels = c("XX", "YY"), values = c("black", "red")) + 
    scale_linetype_discrete(name = "sex", labels = c("XX", "YY")) + 
    labs(y = "Survival", x = "Time")