我有以下数据框
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.我想要这用直方图作为直方图。
答案 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 包