2017-12-18 5 views
0

일부 데이터를 그래프로 표시하고 임계 값을 기준으로 특정 열을 강조 표시하지만 geom_col이 색상을 임의로 할당하는 것처럼 보입니다.ggplot2 geom_col 겉으로보기에 무작위로 결과를 표시합니다.

dass21_scores_plot %>%  
ggplot(aes(dassId, score, label=score)) 
    + geom_col(fill = 
    ifelse(dass21_scores_plot$score == -1, "blue1", 
     ifelse(dass21_scores_plot$measure == "Depression Baseline" && dass21_scores_plot$score > 27, "red", 
      ifelse(dass21_scores_plot$measure == "Anxiety Baseline" && dass21_scores_plot$score > 19, "red", 
       ifelse(dass21_scores_plot$measure == "Stress Baseline" && dass21_scores_plot$score > 33, "red", "green4"))))) 
    + geom_text(aes(label = ifelse(score > -1, as.integer(score), ''), vjust = ifelse(score > 21, 2, -1)), size = 4) 
    + theme(axis.text.x = element_text(size = 10, angle = 90)) 
    + facet_wrap(~measure, ncol = 4) 

이것은 내가 얻은 것입니다.

enter image description here

이 다르게 작성되고 동일한 특성을 가진 심지어 열이 나에게 많은 이해하지 않습니다. 컬럼에는 그래프로 표시되지 않는 속성이 없습니다. 제가 빠진 것이 명백합니까?

+0

빠른 추측 : 스와핑 시도 모두'&&'의 단지에 대한'및'

여기 내 새 코드입니다. '&'는 요소 별 비교를 수행하며, '&&'는 벡터의 첫 번째 요소 만 봅니다. – Marius

+0

나는 그것을 줬다. 그러나 불행하게도 어떤 변화도 없었다. –

+0

(1) 복잡한 데이터 조작을 ggplot 호출에 넣는 것은 나쁜 생각입니다. 일이 잘못 될 경우 디버깅하기가 매우 어렵습니다. (2) 채우기 미학을 설정하고,'aes()'안에 _mapping_하지 않습니다. 미리 채우기 그룹을 정의하는 새 열을 만들려고합니다 (색 이름을 사용하지 마십시오). 그런 다음 채우기 미학을 해당 변수에 매핑하고 'scale_fill_manual'을 사용하여 색상을 제어하십시오. – joran

답변

0

@ joran의 조언을 사용하여 수정했습니다.

colours <- as.character(c()) 
for(i in 1:length(dass21_scores_plot$dassId)) { 
    x = substr(dass21_scores_plot$measure[i], 1, 3) 
    s = dass21_scores_plot$score[i] 
    if (s == -1) { 
     colours[i] = "b" 
    } else if(x == "Dep"){ 
     colours[i] = ifelse(s >= 28, "r", "g") 
    } else if(x == "Anx"){ 
     colours[i] = ifelse(s >= 20, "r", "g") 
    } else if(x == "Str"){ 
     colours[i] = ifelse(s >= 34, "r", "g") 
    } 
} 
dass21_scores_plot$col <- colours 

dass21_scores_plot %>%  
ggplot(aes(dassId, score, label=score)) + geom_col(aes(fill = col), show.legend = F) 
+ geom_text(aes(label=ifelse(score>-1, as.integer(score), ''), vjust = ifelse(score>21, 2, -1)), size=4) 
+ theme(axis.text.x = element_text(size = 10, angle = 90)) + facet_wrap(~measure, ncol=4) 
+ scale_fill_manual(values = c("blue", "green4", "red"))