2013-03-06 8 views
24

内塗りつぶしの色を注文するにはどうすればよい私は結果がカテゴリに対応する様々な色で埋めバーがbarplotあるあなたはggplot2のgeom_bar

ggplot(data,aes(x,y,fill=category)+geom_bar(stat="identity") 

ggplot関数を呼び出しています。しかし、色の順序はバーごとに一貫していません。ピンク、緑、青があるとします。いくつかのバーはピンク、グリーン、ブルーが下から上に、そしていくつかは緑、ピンク、青に変わります。私は明らかなパターンを見ません。

これらの注文はどのように選択されていますか?どうすれば変更できますか?少なくとも、ggplotに一貫した順序を選択させるにはどうすればよいですか?

(x、y、カテゴリ)のクラスはそれぞれ(整数、数値、因子)です。カテゴリを順序付けられた要素にすると、この動作は変わりません。

誰でもこの問題を解決する方法を知っていますか?

再現例:

dput(data) 

structure(list(mon = c(9L, 10L, 11L, 10L, 8L, 7L, 7L, 11L, 9L, 
10L, 12L, 11L, 7L, 12L, 8L, 12L, 9L, 7L, 9L, 10L, 10L, 8L, 12L, 
7L, 11L, 10L, 8L, 7L, 11L, 12L, 12L, 9L, 9L, 7L, 7L, 12L, 12L, 
9L, 9L, 8L), gclass = structure(c(9L, 1L, 8L, 6L, 4L, 4L, 3L, 
6L, 2L, 4L, 1L, 1L, 5L, 7L, 1L, 6L, 8L, 6L, 4L, 7L, 8L, 7L, 9L, 
8L, 3L, 5L, 9L, 2L, 7L, 3L, 5L, 5L, 7L, 7L, 9L, 2L, 4L, 1L, 3L, 
8L), .Label = c("Down-Down", "Down-Stable", "Down-Up", "Stable-Down", 
"Stable-Stable", "Stable-Up", "Up-Down", "Up-Stable", "Up-Up" 
), class = c("ordered", "factor")), NG = c(222614.67, 9998.17, 
351162.2, 37357.95, 4140.48, 1878.57, 553.86, 40012.25, 766.52, 
15733.36, 90676.2, 45000.29, 0, 375699.84, 2424.21, 93094.21, 
120547.69, 291.33, 1536.38, 167352.21, 160347.01, 26851.47, 725689.06, 
4500.55, 10644.54, 75132.98, 42676.41, 267.65, 392277.64, 33854.26, 
384754.67, 7195.93, 88974.2, 20665.79, 7185.69, 45059.64, 60576.96, 
3564.53, 1262.39, 9394.15)), .Names = c("mon", "gclass", "NG" 
), row.names = c(NA, -40L), class = "data.frame") 

ggplot(data,aes(mon,NG,fill=gclass))+geom_bar(stat="identity") 
+2

再現可能な例ですか? –

+0

BTW:Brianは、これは実際に(やや長年の)バグであることを確認しました。 – joran

+0

Readerは注意してください - ggplot2の最近の履歴でこの動作が数回変わってしまいましたが、回答の例のいくつかはもう動作しません。 –

答えて

21

orderと同様に指定する必要があります。

ggplot(data,aes(mon,NG,fill=gclass,order=gclass))+ 
    geom_bar(stat="identity") 

enter image description here

これはまたはbugであってもなくてもよいです。

+2

そうです。 – Dave31415

4

あなたはscale_fill_機能を使用して色を変更することができます。たとえば:

ggplot(dd,aes(mon,NG,fill=gclass)) + 
    geom_bar(stat="identity") + 
    scale_fill_brewer(palette="blues") 

barsで一貫性のある順序を取得するには、あなたは、データフレームを注文する必要があります。

dd = dd[with(dd, order(gclass, -NG)), ] 

は伝説の順序を変更するためには、gclass要因を変えます。だから、のようなもの:注文する

dd$gclass= factor(dd$gclass,levels=sort(levels(dd$gclass), TRUE)) 

enter image description here

+1

一貫した注文のようですか?私は彼のデータでOPが同じ問題を抱えています。何か怪しいものがここで起こっている。 – joran

+0

@joranああ、私は今問題を見る! – csgillespie

+0

@ Dave31415私は質問に答えたと思うが、なぜこの仕事はちょっとロピーなのか理解している。 – csgillespie

1

は、あなたがlevelsパラメータを使用して順序を通知しなければなりません。このように:

data$gclass 
(data$gclass2 <- factor(data$gclass,levels=sample(levels(data$gclass)))) # Look the difference in the factors order 
ggplot(data,aes(mon,NG,fill=gclass2))+geom_bar(stat="identity") 
38

ggplot2_2.0.0以降、order審美的なものは利用できなくなりました。塗りつぶしの色で並べられたスタックを持つグラフを取得するには、注文するグループ変数でデータセットを並べ替えるだけです。

私はしばしばarrangeからdplyrを使用します。ここでは、注文データセットを作成するのではなく、ggplotコール内のfillファクタでデータセットを注文していますが、いずれか正常に動作します。 enter image description here

:所望のために、今、両方の場合において、得られたプロットで

ggplot(data[order(data$gclass), ], aes(mon, NG, fill = gclass)) + 
    geom_bar(stat = "identity") 

library(dplyr) 

ggplot(arrange(data, gclass), aes(mon, NG, fill = gclass)) + 
    geom_bar(stat = "identity") 

この

を容易に抽出ブラケットと古典 orderを使用して、もちろん、基地Rで行われます

ggplot2_2.2.0更新

ggplot_2.2.0では、入力レベルは因子レベルの順序に基づいています。デフォルトの注文では、底部の代わりにトップに最初のレベルがプロットされます。

スタックの一番下のレベルには、をposition_stackに使用できます。 geom_bar(stat = "identity")のショートカットとしてgeom_colを使用することもできます。

ggplot(data, aes(mon, NG, fill = gclass)) + 
    geom_col(position = position_stack(reverse = TRUE)) 
+0

これはstat = "identity"で正常に動作しますが、geom_bar(stat = "summary"、 fun.y =中央値)で失敗します。この場合、データを要約し、適切な順序を得るためにstat = "identity"を使用しなければなりませんでした。私はこれを信じています。2.0 –

+0

@ EtienneLow-Décarie 'stat_summary_bin'がこれにふさわしいツールかもしれません。あなたは 'stat =" summary "'の代わりに 'stat =" summary_bin "'を使ってみましたか? – aosmith

+0

うん、これはかなり迷惑だった。誰かが「注文」美学が取り除かれた理由について誰でもコメントできますか?参考:https://github.com/hadley/ggplot2/issues/1593 – fanli

関連する問題