14

我正在尝试创建一个多面条形图,每个方面的百分比加起来为 100。对此的解决方案似乎是group和的组合..density..。但是,在我看来,这groupfill.

数据:

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被覆盖: 每个方面的百分比总和为 100

但是,下面的代码尊重fill但给了我错误的百分比(整个图表的总和为 100)(使用..密度..):

ggplot(test, aes(test2)) +
     geom_bar(aes(y = ..count../sum(..count..), fill=test2)) + 
     facet_grid(~test1)

总图表的百分比总和为 100

相关:我的这个老问题:在多面 ggplot 条形图中,y 实验室的百分比?.

是的——我可以创建额外的数据,但我觉得这属于表示层。实际上这感觉像一个错误?

4

1 回答 1

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)

在此处输入图像描述

于 2012-10-19T01:45:44.523 回答