График GGPLOT с гранями: несколько "уклоненных" баров на категорию заполнения?
Я строю этот набор данных 'ds'
ds <- structure(list(FN = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L,
3L, 4L, 4L, 4L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L,
1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 1L, 1L, 1L, 2L,
2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("FN=1", "FN=2", "FN=3",
"FN=4"), class = "factor"), fraction = structure(c(1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("serum",
"plasma"), class = "factor"), demographics = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("not adjusted",
"adjusted"), class = "factor"), freq = c(132, 47, 14, 30, 29,
19, 25, 14, 9, 5, 4, 4, 24, 21, 15, 6, 6, 5, 4, 4, 2, 2, 2, 2,
35, 28, 25, 68, 24, 11, 33, 15, 10, 12, 11, 8, 24, 16, 15, 13,
10, 6, 7, 6, 5, 4, 3, 3)), .Names = c("FN", "fraction", "demographics",
"freq"), class = "data.frame", row.names = c(NA, -48L))
используя этот ggplot-код
ggplot(ds, aes(x=fraction, y=freq, fill=factor(demographics, c("adjusted", "not adjusted")))) +
geom_bar(position=position_dodge(width=0.9), stat="identity", color="black") +
facet_grid(FN~., switch="y") +
scale_fill_manual("", values=c("not adjusted"="#e41a1c", "adjusted"="#377eb8"), guide=guide_legend(reverse = TRUE)) +
theme_bw() +
theme(legend.title=element_blank(), legend.position="bottom") +
theme(axis.title.x=element_text(face="bold")) +
theme(axis.title.y=element_blank()) +
theme(axis.ticks=element_blank()) +
theme(panel.background=element_blank()) +
theme(panel.grid=element_blank()) +
theme(strip.text.y = element_text(angle=180)) + coord_flip()
который возвращает этот результат
Как вы можете видеть, есть три столбца, которые складываются в x-переменную "фракция" (сыворотка / плазма) и "демографическая" категория заполнения (не корректируется / не корректируется). Тем не менее, я бы хотел, чтобы эти три столбца для каждой демографической категории были представлены рядом. Это вообще возможно?
Ваша помощь очень ценится!
2 ответа
Решение
Добавить отдельную переменную группировки
library("tidyverse")
ds %>% mutate(row = row_number()) %>%
ggplot(aes(x=fraction, y=freq, fill=factor(demographics, c("adjusted", "not adjusted")), group = row)) +
geom_bar(position=position_dodge(width=0.9), stat="identity", color="black") +
facet_grid(FN~., switch="y") +
scale_fill_manual("", values=c("not adjusted"="#e41a1c", "adjusted"="#377eb8"), guide=guide_legend(reverse = TRUE)) +
theme_bw() +
theme(legend.title=element_blank(), legend.position="bottom") +
theme(axis.title.x=element_text(face="bold")) +
theme(axis.title.y=element_blank()) +
theme(axis.ticks=element_blank()) +
theme(panel.background=element_blank()) +
theme(panel.grid=element_blank()) +
theme(strip.text.y = element_text(angle=180)) +
coord_flip()
Прямо сейчас столбцы уклонены demographics
, но если добавить еще одну эстетику (внутри aes()
функция) group=freq
ggplot будет уклоняться от каждого бара отдельно. Поэтому ваш код должен читать:
ggplot(ds, aes(x=fraction, y=freq, group=freq, fill=factor(demographics, c("adjusted", "not adjusted")))) +
geom_bar(position=position_dodge(width=0.9), stat="identity", color="black") +
facet_grid(FN~., switch="y") +
scale_fill_manual("", values=c("not adjusted"="#e41a1c", "adjusted"="#377eb8"), guide=guide_legend(reverse = TRUE)) +
theme_bw() +
theme(legend.title=element_blank(), legend.position="bottom") +
theme(axis.title.x=element_text(face="bold")) +
theme(axis.title.y=element_blank()) +
theme(axis.ticks=element_blank()) +
theme(panel.background=element_blank()) +
theme(panel.grid=element_blank()) +
theme(strip.text.y = element_text(angle=180)) + coord_flip()