Подтвердить что ты не робот

Суммарное процентное соотношение для каждой грани - уважение "заполнение"

Я пытаюсь создать граненый штрих-код, с процентами, составляющими до 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 перезаписывается: percentage sums to 100 for each facet

Однако код ниже относится к fill, но дает мне неправильные проценты (суммы до 100 для всей диаграммы) (используя..density..):

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

percentage sums to 100 for the total chart

Связанный: Этот старый мой вопрос: процент на y lab в гранжевом барграфе ggplot?.

И да - я мог бы создать дополнительные данные, но я считаю, что это принадлежит слою презентации. На самом деле это похоже на ошибку?

4b9b3361

Ответ 1

Это немного взломанный, но вы можете ссылаться на ..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')

enter image description here

сравните, не сжимая ..x.. с коэффициентом

ggplot(test, aes(x= test2, group = test1)) + 
  geom_bar(aes(y = ..density.., fill = ..x..)) +
   facet_grid(~test1)

enter image description here