Суммарное процентное соотношение для каждой грани - уважение "заполнение"
Я пытаюсь создать граненый штрих-код, с процентами, составляющими до 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?.
И да - я мог бы создать дополнительные данные, но я считаю, что это принадлежит слою презентации. На самом деле это похоже на ошибку?
Ответы
Ответ 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]()