使用直方图时使用直方图获得百分比

时间:2012-02-14 23:36:18

标签: r ggplot2

我有以下数据框

z x y
1 1 a
2 2 a
3 1 a
4 2 a
5 1 b
6 9 b
7 9 b
8 8 b
9 7 b

当我做的时候

p = ggplot(z,aes(x,group=y)) + geom_histogram(aes(y = ..density..,group=y)) +       facet_grid(y ~ .)
p

我得到了多面图,但没有z $ y中每个符号的y轴百分比。

基本上,我想要一个直方图,但是用百分比表示每个z $ y值的频率分布,即a,b。

在这种情况下,在'a'下,50%是1,50%是2,在'b'下,20%是1,40%是9,20%是7,20%是8.我想要这用直方图作为直方图。

1 个答案:

答案 0 :(得分:2)

这不是直方图(没有密度估算),而是条形图。

d <- data.frame( 
  value = c(1,2,1,2,1,9,9,8),
  group = c(rep("a",4),rep("b",4))
)
# With counts
ggplot(d) + geom_bar(aes(factor(value))) + facet_grid(group ~ .)
# With percentages
ggplot(d) + 
  geom_bar(aes(factor(value), (..count..)/sum(..count..))) + 
  scale_y_continuous(formatter = 'percent') + 
  facet_grid(group ~ .)

注意:在 ggplot2 的更新版本中,我们会改用scale_y_continuous(labels = percent_format()),并确保加载 scale