2017-10-05 11 views
2

ファセットにgeo_barを使用して、絶対数ではなくパーセンテージを取得したいと考えていますが、パーセンテージは全体の数に対してではなく、各面に比例する必要があります。ggplot2:geom_bar、面取り率を計算

これは多くの(example)について議論されており、geom_bar(aes(y = (..count..)/sum(..count..)))を使用することを示唆しています。これはファセットでは機能しません(つまり、合計カウントが得られます)。より良い解決策が提案されました。 ​​を代わりに使用しています。すべてのバーは100%です。

これはx文字ある場合x数値ですが、ない場合は機能しているようです!どうして?私は何か間違っているのですか?ありがとう!

library(tidyverse) 
df <- data_frame(val_num = c(rep(1, 60), rep(2, 40), rep(1, 30), rep(2, 70)), 
      val_cat = ifelse(val_num==1, "cat", "mouse"), 
      group=rep(c("A", "B"), each=100)) 

#works with numeric 
ggplot(df) + stat_count(mapping = aes(x=val_num, y=..prop..)) + facet_grid(group~.) 

# does not work? 
ggplot(df) + stat_count(mapping = aes(x=val_cat, y=..prop..)) + facet_grid(group~.) 
+0

x軸がカテゴリの場合、基本的に「ネコの割合はどの猫で、マウスの割合はマウスですか? – lebelinoz

+0

私は質問がグループ/ファセットA内にあると思う、ネコ(または値1)対マウス(値2)の割合はどうですか?グループBも同じですか?しかし、はい、多分私の質問は病気ですか?私はまだ動作がなぜ文字よりも数字のために異なるのか分からないのですか? – Matifou

答えて

3

group=group追加むしろval_catの各レベルに対して別々になり、デフォルトよりも、groupによって比率を計算するggplot伝えます。

ggplot(df) + 
    stat_count(aes(x=val_cat, y=..prop.., group=group)) + 
    facet_grid(group~.) 

enter image description here

X-変数が連続している場合は、デフォルトでstat_countファセット内のすべてのデータを超える割合を算出し、同様に、それが見えます。ただし、x変数がカテゴリに属している場合、stat_countは各xレベルで別々にパーセンテージを計算します。

グループの審美性を追加すると、ファセット内のすべての値ではなく、各xレベルでパーセンテージが計算されます。因子にval_numを回す

ggplot(df) + 
    stat_count(aes(x=val_num, y=..prop.., group=val_num)) + 
    facet_grid(group~.) 

は、同様に百分率は各xレベル内代わりのファセットのすべての値にわたって計算されるようにします。

ggplot(df) + 
    stat_count(aes(x=factor(val_num), y=..prop..)) + 
    facet_grid(group~.) 
+0

偉大な、よく目撃された!数値のものではなく、文字の値に 'group'を指定する必要があることに注意するのは興味深いことです。 – Matifou