library(tidyverse)
dat <- read.table(text = "A B C
1 23 234 324
2 34 534 12
3 56 324 124
4 34 234 124
5 123 534 654",
sep = "",
header = TRUE) %>%
gather(key = "variable", value = "value") %>%
group_by(variable) %>%
mutate(ind = as.factor(rep(1:5)),
perc = value / sum(value))
ggplot(dat, aes(variable, perc, fill = ind)) +
geom_col() +
scale_y_continuous(labels = scales::percent_format()) +
facet_grid(~ variable, scales = "free_x") +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
Приведенный выше код создает фасет с накоплением, который вы также видите выше. ind
части каждой гистограммы упорядочены так же, как они отображаются в легенде.
Я предпочитаю, чтобы каждая ind
часть вместо этого помещалась в порядке возрастания (или убывания). Обычно я достигаю этого благодаря @dgrtwo и функции reorder_within .
reorder_within <- function(x, by, within, fun = mean, sep = "___", ...) {
new_x <- paste(x, within, sep = sep)
stats::reorder(new_x, by, FUN = fun)
}
Но - использование этого в моем случае разбивает столбчатую диаграмму выше на этот разбитый график ниже. Как сохранить гистограмму с накоплением и порядок каждого ind
по возрастанию или по убыванию?
Примечание. Скорее всего, это не дубликат нескольких других вопросов "переупорядочить в аспектах". Мне не удалось найти вопрос, касающийся гистограмм с накоплением, и проблему, которую я описал выше.
ggplot(dat,
aes(reorder_within(ind, value, variable), perc, fill = ind)) +
geom_col() +
scale_y_continuous(labels = scales::percent_format()) +
facet_grid(~ variable, scales = "free_x") +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank())