面对男生女生去过的前20个地方的排列

Faceting the arrangement of the top 20 places visited by boys and girls

我在尝试排total_number的男生和女生的时候遇到了这个问题,但是有男生排在前20名女生排不到前20名。可视化没有显示样本的均匀表示,因为女孩的最高位置不是男孩的最高位置,反之亦然(尽管他们确实访问了相似的地方,只是数量不多)。

place Category2 total_number
Andorra la Vella boy 66394
Yerevan boy 33539
Vienna boy 29757
Baku girl 24615
Minsk girl 23847
Brussels girl 23691
Sarajevo boy 23285
Sofia boy 21309
Oslo girl 20982
Zagreb boy 19885

我按 total_number 降序排列,使用 head(20) 并尝试绘制它。这看起来不太好,因为男孩和女孩(第 2 类)有空位和乱序。我想安排数据集的前 20 名,但我希望 total_number 的安排在 Category2 的女孩和男孩之间交替显示,以显示平等的代表性,并且在可视化的前 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))

visualization: boys on left and girls on right

如果我理解正确的话,一种解决方法是将 facet_wrap 中的比例参数设置为“免费”并根据 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")