2017-06-10 16 views
1

値が0.5よりも大きいか小さいかに基づいて、ggplot棒グラフに色を割り当てようとしています。R - 条件付き値に基づいてマニュアルカラーを設定する

ここには再現可能なコードと割り当てられていないグラフがあります。以下stackoverflowの質問(Setting a conditional color by stat_summary in ggplot)に基づい

dnow <- data.frame(x=rep(c("protected areas","wildnerness areas","private lands","multi-use lands"), each=25), y=runif(100)) 

ggplot(dnow,aes(x=x, y=y)) + stat_summary(fun.y=mean, geom="bar", position=position_dodge(1)) + 
    stat_summary(fun.data = mean_se,geom="errorbar", color="grey40",position=position_dodge(1), width=.2) + 
    geom_hline(yintercept = 0.5) + labs(y="Mean Agreement") + theme_bw() + 
    theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(), axis.title.y=element_blank()) + 
    coord_flip() 

enter image description here

Iは0.5を超える値を有するバーは緑色やバーになるよう手動stat_summaryaesを用いて0.5の閾値に基づいて色を割り当てることを試みました0.5未満の値は赤です。

コードと出力は以下のとおりです。ただし、グラフは正しく表示されません。閾値に基づいて単一のバーに色付けする代わりに、「真」または「偽」の2つのバーを作成しました。これを解決する方法がわかりません。

ggplot(dnow,aes(x=x, y=y)) + stat_summary(fun.y=mean, geom="bar", aes(fill = y > 0.5), position=position_dodge(1)) + 
    stat_summary(fun.data = mean_se,geom="errorbar", color="grey40",position=position_dodge(1), width=.2) + 
    geom_hline(yintercept = 0.5) + labs(y="Mean Agreement") + theme_bw() + 
    theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(), axis.title.y=element_blank()) + 
    scale_fill_manual(values = c('red', 'green')) + coord_flip() 

enter image description here

+0

再現可能な例を提供する必要があります。誰もあなたのデータなしでコードを実行することはできません – ggll

+0

再現可能な例を含めるように編集しました。 – user2359494

答えて

1

お客様のaesy..y..に変更するだけです。手元にあるデータを集約し、リンクした投稿に似たgeom_barを使用するのが最善の方法ですがこれは動作するはずです:

ggplot(dnow,aes(x=x, y=y)) + stat_summary(fun.y=mean, geom="bar", aes(fill = ..y.. > 0.5), position=position_dodge(1)) + 
    stat_summary(fun.data = mean_se,geom="errorbar", color="grey40",position=position_dodge(1), width=.2) + 
    geom_hline(yintercept = 0.5) + labs(y="Mean Agreement") + theme_bw() + 
    theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(), axis.title.y=element_blank()) + 
    scale_fill_manual(values = c('red', 'green')) + coord_flip() 

enter image description here

..y..fun.yから計算された平均値を指します。

+0

私は..y ..について全く知りませんでした!ニース。 – user2359494

0

理由は、着色のためのあなたのデータフレームで元の値ではなく、計算された要約統計量を使用することです。デフォルトでは、すべての離散変数でグループ分けが行われます:xと0.5より大きい値。したがって、統計集計関数は8つのグループの平均を計算し、これに基づいて棒を色付けします。私は計算された手段に基づいて直接色を付ける方法を知らない。しかし、あなたは各グループの平均を事前に計算し、この事前計算された平均に基づいて色を付けることができます。したがって、xごとに平均をとることになります。

+0

ええ、それは私が恐れていたものです。 'stat_summary'呼び出しで' aes(fill = y> 0.5) 'を追加しようとしましたが、役に立たなかった。 – user2359494

関連する問題