2017-12-18 15 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

@ジョランの助言を使って修正しました。

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")) 
関連する問題