Объединить сгруппированные и составные гистограммы в R

Вот как выглядит мой фрейм данных:

CatA    CatB   CatC 
1        Y      A
1        N      B
1        Y      C
2        Y      A
3        N      B
2        N      C 
3        Y      A
4        Y      B
4        N      C 
5        N      A
5        Y      B

Я хочу иметь CatA на оси X и рассчитывать на ось Y. Этот график подходит. Однако я хочу создать группу для CatB и сложить ее с помощью CatC, сохраняя счет по оси Y. Это то, что я пробовал, и вот как это выглядит:

введите здесь описание изображения

Я хочу, чтобы это выглядело так:

введите здесь описание изображения

Мой код:

ggplot(data, aes(factor(data$catA), data$catB, fill = data$catC)) 
+ geom_bar(stat="identity", position = "stack") 
+ theme_bw() + facet_grid( ~ data$catC)

PS: Прошу прощения за предоставление ссылок на изображения, потому что я не могу их загрузить, это дает мне ошибку, возникающую в imgur, каждый раз, когда я загружаю.


person Ankur Sinha    schedule 12.07.2017    source источник
comment
ваш ggplot код содержит данные, отличные от тех, которыми вы поделились выше.   -  person mtoto    schedule 12.07.2017
comment
Я просто сократил набор данных и нарисовал окончательный примерный график того, как он будет выглядеть. Суть в том, что CatB нужно сгруппировать, а C нужно уложить в стек, сохраняя CatA на оси x и ее счетчик на оси Y. Я теперь ясно?   -  person Ankur Sinha    schedule 12.07.2017
comment
вы можете сделать свой код последовательным в этом случае?   -  person mtoto    schedule 12.07.2017
comment
Сейчас лучше? Просто отредактировал, чтобы было удобнее читать.   -  person Ankur Sinha    schedule 12.07.2017


Ответы (1)


Вы можете использовать фасеты:

df <- data.frame(A = sample(1:5, 30, T), 
                 B = sample(c('Y', 'N'), 30, T), 
                 C = rep(LETTERS[1:3], 10))

ggplot(df) + geom_bar(aes(B, fill = C), position  = 'stack', width = 0.9) + 
  facet_wrap(~A, nrow = 1) + theme(panel.spacing = unit(0, "lines"))

введите описание изображения здесь

person Martin Schmelzer    schedule 12.07.2017
comment
Это работает как шарм. Никогда не новичок в этих аспектах, гораздо проще сделать их, используя то же самое. Большое спасибо, дружище! - person Ankur Sinha; 12.07.2017
comment
Очень круто! Это, безусловно, самое элегантное решение, которое я когда-либо видел в отношении такого рода вопросов! - person Pesche Helfer; 17.08.2018