2012-09-02 13 views
13

ファセットごとに100までのパーセンテージを追加してファセットバープロットを作成しようとしています。これに対する解決策は、group..density..の組み合わせのようです。どのくらい - groupfillと競合しているように思えます。各ファセットの合計パーセンテージ - "fill"を尊重します

データ:

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

バスあなたは、fillが上書きされて見ることができるように:

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

これは、右の割合を取得します percentage sums to 100 for each facet

しかし、点fill次のコードが、私に間違ったパーセンテージを与える(グラフ全体で100になる)。(密度を使って..):

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

percentage sums to 100 for the total chart

関連:私のこの古い質問:percentage on y lab in a faceted ggplot barchart?

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

答えて

13

これはちょっとしたハックですが、geom_barコールで..x..を参照できます。唯一の問題はggplotこのnumericを考慮し、私が要因

ggplot(test, aes(x= test2, group = test1)) + 
    geom_bar(aes(y = ..density.., fill = ..x..)) + 
    facet_grid(~test1) 
..x..を強要ではないとの比較 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') 

enter image description here

への呼び出し内の素敵なラベルを考慮するために強要して与えているということです

enter image description here

+0

私はそのSet3 palleteが大好きです! – duhaime

+0

@mnel、私はShiny with position = "dodge"で同様の棒グラフを生成しようとしていましたが、すべての棒を100%得ました。私がどこに間違っているのかを示せばいいと思う。このように連絡してくれてありがとうと申し訳ありません。私は質問をhttp://stackoverflow.com/questions/41078480/r-shiny-ggplot-bar-and-line-charts-with-dynamic-variable-selection-and-y-axis-toに掲載しました。 – user1412

関連する問題