Я столкнулся с этой проблемой, пытаясь упорядочить total_number мальчиков и девочек, но были первые места для мальчиков, которых не было в топ-20 для девочек. Визуализация не показала равномерного представления выборки, потому что первые места девочек не являются первыми местами мальчиков и наоборот (хотя они и посещают подобные места, но не в большом количестве).
место | Категория2 | общее число |
---|---|---|
Андорра-ла-Велья | мальчик | 66394 |
Ереван | мальчик | 33539 |
Вена | мальчик | 29757 |
Баку | девочка | 24615 |
Минск | девочка | 23847 |
Брюссель | девочка | 23691 |
Сараево | мальчик | 23285 |
София | мальчик | 21309 |
Осло | девочка | 20982 |
Загреб | мальчик | 19885 |
Я расположил по убыванию total_number, использовал head(20) и попытался построить его. Это выглядело не очень хорошо из-за пустых мест и неупорядоченности по отношению к мальчикам и девочкам (категория 2). Я хочу упорядочить 20 лучших в наборе данных, но я хочу, чтобы порядок total_number чередовался между девочками и мальчиками из категории 2, чтобы показать равное представление и отсутствие пробелов в верхних 20 визуализациях. Как мне это сделать?
bg_places_top <- bg_places %>%
group_by(place, Category2) %>%
summarise(total_number = n()) %>%
arrange(desc(total_number) %>%
head(20) %>%
ggplot(aes(x = place, y = total_number)) +
geom_col(position = "dodge") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
facet_wrap(~Category2))
Если я правильно вас понял, один из способов сделать это - установить для аргумента scales внутри facet_wrap значение «free» и упорядочить места в соответствии с total_number (я использовал - для инвертирования возрастающего порядка):
library(ggplot2)
ggplot2::ggplot(bg_places, aes(x = reorder(place, -total_number), y = total_number)) +
ggplot2::geom_col() +
# use "free_x" if you want the all y-axis to have the same scale/height
ggplot2::facet_wrap(~Category2, scales = "free")
Ваш ответ натолкнул меня на другой вопрос, на который я сам нашел ответ. Опубликовано здесь связь. Спасибо