14

ファセットごとに合計 100 になるパーセンテージで、ファセット バープロットを作成しようとしています。groupこれに対する解決策は、との組み合わせのよう..density..です。groupとにかく - と矛盾しているように思えfillます。

データ:

test <- data.frame(
     test1 = sample(letters[1:2], 100, replace = TRUE), 
     test2 = sample(letters[3:8], 100, replace = TRUE)
 )

これにより、パーセンテージが正しくなります。

ggplot(test, aes(test2)) +
     geom_bar(aes(y = ..density.., fill=test2,group=test1)) + 
     facet_grid(~test1)

ご覧のとおり、バスfillは上書き されます。各ファセットのパーセンテージの合計は 100

ただし、以下のコードは尊重しますfillが、間違ったパーセンテージを示します (グラフ全体の合計は 100 になります) (..density .. を使用):

ggplot(test, aes(test2)) +
     geom_bar(aes(y = ..count../sum(..count..), fill=test2)) + 
     facet_grid(~test1)

グラフ全体のパーセンテージの合計が 100 になる

関連: 私のこの古い質問:ファセット ggplot 棒グラフの y ラボのパーセンテージ? .

はい、追加のデータを作成することもできますが、これはプレゼンテーション層に属していると思います。実際、これはバグのように感じますか?

4

1 に答える 1

14

これはちょっとしたハックですが、呼び出し..x..内で参照できます。geom_bar唯一の問題は、ggplotこれを考慮する numericことです。scale_fill_brewer

ggplot(test, aes(x= test2, group = test1)) + 
   geom_bar(aes(y = ..density.., fill = factor(..x..))) + 
   facet_grid(~test1) + 
   scale_fill_brewer(name = 'test2', breaks = 1:6, 
                     labels = levels(test$test2), palette = 'Set3')

ここに画像の説明を入力

..x..要因に強制しないと比較する

ggplot(test, aes(x= test2, group = test1)) + 
  geom_bar(aes(y = ..density.., fill = ..x..)) +
   facet_grid(~test1)

ここに画像の説明を入力

于 2012-10-19T01:45:44.523 に答える