我正在尝试创建一个多面条形图,每个方面的百分比加起来为100。对此的解决方案似乎是group
和..density..
的组合。然而 - 在我看来,group
与fill
冲突。
数据:
test <- data.frame(
test1 = sample(letters[1:2], 100, replace = TRUE),
test2 = sample(letters[3:8], 100, replace = TRUE)
)
这使得百分比正确:
ggplot(test, aes(test2)) +
geom_bar(aes(y = ..density.., fill=test2,group=test1)) +
facet_grid(~test1)
总线如您所见,fill
被覆盖:
但是,下面的代码尊重fill
但是给出了错误的百分比(整个图表的总和为100)(使用..density ..):
ggplot(test, aes(test2)) +
geom_bar(aes(y = ..count../sum(..count..), fill=test2)) +
facet_grid(~test1)
相关:我的这个老问题:percentage on y lab in a faceted ggplot barchart?。
是的 - 我可以创建其他数据,但我觉得这属于表示层。实际上这感觉像个错误?
答案 0 :(得分:14)
这有点像黑客,但你可以在..x..
电话中引用geom_bar
。唯一的问题是ggplot
会考虑这个numeric
,因此我强制要求并在调用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')
与不将..x..
强制转换为因子
ggplot(test, aes(x= test2, group = test1)) +
geom_bar(aes(y = ..density.., fill = ..x..)) +
facet_grid(~test1)