fct_reorder() 仅适用于一个方面

Eri*_*ric 3 r ggplot2 forcats

我正在尝试创建一个多面条形图,其中条形根据频率排序(使用 fct_reorder)。这是我的代码:

\n\n
word_count_label <- twitter_sm %>%\n  group_by(complaint) %>%\n  summarize_if(is.numeric, sum) %>%\n  ungroup() %>%\n  gather(word, n, -complaint) %>%\n  mutate(word = as.factor(word)) %>%\n  filter(n > 0) %>%\n  group_by(complaint) %>%\n  mutate(word = fct_reorder(word, n)) %>%\n  top_n(20, n) %>%\n  arrange(complaint, desc(n)) %>%\n  ungroup()\n
Run Code Online (Sandbox Code Playgroud)\n\n

生成的数据框如下所示:

\n\n
   complaint     word              n\n   <fct>         <fct>         <dbl>\n 1 non_complaint klm             820\n 2 non_complaint flight          653\n 3 non_complaint unit            537\n 4 non_complaint americanair     532\n 5 non_complaint delta           441\n 6 non_complaint thank           420\n 7 non_complaint southwestair    363\n 8 non_complaint britishairway   326\n 9 non_complaint just            294\n10 non_complaint usairway        261\n# \xe2\x80\xa6 with 30 more rows\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当我创建一个分面条形图来绘制每个方面的字数时(代码如下所示),

\n\n
  ggplot(word_count_label, aes(x = word, y = n, fill = complaint)) +\n  geom_col() + coord_flip() + \n  facet_wrap(~complaint, scales = \'free_y\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

该图仅为一个方面订购条形:

\n\n

在此输入图像描述

\n\n

有谁对为什么会发生这种情况有任何见解?谢谢!

\n

OTS*_*ats 5

您可以使用tidytextreorder_within()包中的而不是. 朱莉娅·西尔格(Julia Silge)在这里有一个很好的例子。fct_reorder()

word_count_label <- twitter_sm %>%
  group_by(complaint) %>%
  summarize_if(is.numeric, sum) %>%
  ungroup() %>%
  gather(word, n, -complaint) %>%
  mutate(word = as.factor(word)) %>%
  filter(n > 0) %>%
  mutate(word = reorder_within(word, n, complaint)) %>%
  group_by(complaint) %>%
  top_n(20, n) %>%
  arrange(complaint, desc(n)) %>%
  ungroup()
Run Code Online (Sandbox Code Playgroud)

此外,Julia 还用作scale_x_reordered()ggplot 中的图层。下面是一个示例:

ggplot(word_count_label, aes(x = word, y = n, fill = complaint)) +
  geom_col() + 
  coord_flip() + 
  scale_x_reordered() + 
  facet_wrap(~complaint, scales = 'free_y')
Run Code Online (Sandbox Code Playgroud)