ggplot2:geom_bar,计算分面百分比

Mat*_*fou 2 r ggplot2

我想使用geo_barwith facets,获得百分比而不是绝对计数,但百分比应该相对于每个方面,而不是相对于整体计数。

这已经讨论了很多(示例),建议使用geom_bar(aes(y = (..count..)/sum(..count..))). 这不适用于方面(即会给出总数)。已经提出了更好的解决方案,stat_count(mapping = aes(x=x_val, y=..prop..))改为使用。

如果xnumeric,这似乎有效,但如果xcharacter 则无效:所有条形都是 100%!为什么?难道我做错了什么?谢谢!

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~.)
Run Code Online (Sandbox Code Playgroud)

eip*_*i10 5

添加group=group告诉 ggplot 按 计算比例group,而不是默认值,默认值将分别针对 的每个级别val_cat

ggplot(df) + 
  stat_count(aes(x=val_cat, y=..prop.., group=group)) + 
  facet_grid(group~.)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

当 x 变量是连续的时,看起来stat_count默认情况下计算方面中所有数据的百分比。但是,当 x 变量是分类变量时,stat_count在每个 x 水平内分别计算百分比。看看下面的例子会发生什么:

添加val_num为组美学会导致在每个 x 级别内计算百分比,而不是在构面中的所有值上计算。

ggplot(df) + 
  stat_count(aes(x=val_num, y=..prop.., group=val_num)) + 
  facet_grid(group~.)
Run Code Online (Sandbox Code Playgroud)

车削val_num成因子同样导致要每个x水平内,而不是通过在小面的所有值计算的百分比。

ggplot(df) + 
  stat_count(aes(x=factor(val_num), y=..prop..)) + 
  facet_grid(group~.)
Run Code Online (Sandbox Code Playgroud)