每个方面的总和百分比 - 尊重"填充"

And*_*eas 14 r ggplot2

我正在尝试创建一个刻面的条形图,每个方面的百分比加起来为100.这个问题的解决似乎是一个组合group..density...然而 - 在我看来,这group与之相矛盾fill.

数据:

test <- data.frame(
     test1 = sample(letters[1:2], 100, replace = TRUE), 
     test2 = sample(letters[3:8], 100, replace = TRUE)
 )
Run Code Online (Sandbox Code Playgroud)

这使得百分比正确:

ggplot(test, aes(test2)) +
     geom_bar(aes(y = ..density.., fill=test2,group=test1)) + 
     facet_grid(~test1)
Run Code Online (Sandbox Code Playgroud)

您可以看到的总线fill被覆盖: 每个方面的百分比总和为100

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

ggplot(test, aes(test2)) +
     geom_bar(aes(y = ..count../sum(..count..), fill=test2)) + 
     facet_grid(~test1)
Run Code Online (Sandbox Code Playgroud)

总图表的百分比总和为100

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

是的 - 我可以创建其他数据,但我觉得这属于表示层.实际上这感觉就像一个bug?

mne*_*nel 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')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

比较而不是强迫 ..x..一个因素

ggplot(test, aes(x= test2, group = test1)) + 
  geom_bar(aes(y = ..density.., fill = ..x..)) +
   facet_grid(~test1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述