首页 > 解决方案 > fct_reorder/ggplot2 没有按要求排序

问题描述

我正在处理最新的 TidyTuesday 数据,但我的情节中有问题。新泽西州显示在纳什维尔上方,尽管纳什维尔总体上具有更多价值。我不确定如何解决这个问题。

我认为这与用户 etmckinley 的一条推文首先在纳什维尔排序有关,因为它按字母顺序排在用户名 sqlsekou 之前。也许有一种方法可以逆转排序并使其正常工作?

如果没有,我还能如何正确订购数据以使纳什维尔高于新泽西州?

library(tidyverse)
tweets <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-06-15/tweets.csv')

top_states <- tweets %>% 
  filter(
    location != "iPhone: 34.704040,-86.722909",
    location != "Kevin.Elder@GCSU.edu"
  ) %>% 
  drop_na(location) %>% 
  count(location, sort = TRUE) %>% 
  slice_max(n, n = 7) %>% 
  pull(location)

tweets %>% 
  filter(
    location != "iPhone: 34.704040,-86.722909",
    location != "Kevin.Elder@GCSU.edu"
  ) %>% 
  drop_na(location) %>% 
  count(location, username, sort = TRUE) %>% 
  filter(location %in% top_states) %>% 
  mutate(location = fct_reorder(location, n)) %>% 
  mutate(username = fct_reorder(username, -n)) %>% 
  ggplot(aes(n, location, fill = username)) +
    geom_col() +
    scale_fill_brewer(palette = "Set3") +
    labs(
      x = "Quantity of tweets",
      y = "Location",
      title = "Tweets by location over 3 month period",
      subtitle = "Filled by username"
    )

在此处输入图像描述

标签: rggplot2tidyverse

解决方案


默认情况下,fct_reorder按中值重新排序。您的纳什维尔条形图有 2 个组件,一个大,一个小,中间值介于两者之间。您的 NJ 条只有一个分量,因此中位数是完整值。fct_reorder通过设置覆盖默认值.fun = sum。有关?fct_reorder更多详细信息,请参阅。


推荐阅读