使用 geom_col 条形图对多个条形图进行排序或排序

Sort or order multiple bars with geom_col barplot

我有这种table:

Year    Substance     Number
2013        A           32
2013        B           27
2013        C           17
2013        D           17
2013        E           15
2013        F           13
2014        B           20
2014        D           17
2014        A           16
2014        C           11
2014        F            9
2014        G            3

基本上到2018年每年都有6、7种物质,每种物质都有一个编号(出现频率)。这些物质有真实的名称,但我不能在 Internet 上发布它们,所以我将它们更改为 A、B、C、D、E、F 和 G。我无法按照我的意愿按降序排列金条。

我在 Internet 上做了很多研究并尝试了很多东西:forcats、factor、levels、reorder 等,none 都奏效了。我有一个 R 新手,所以我现在真的不知道什么是做我想做的事的最好方法。

当我尝试这样绘制时,它按字母顺序排列内容:

ggplot(Test, aes(x = Year, y = Number, fill = Substance)) + geom_col(position = "dodge")

第一年,2013,顺序是对的。我希望它每隔一年看起来像这样,按降序排列。我该怎么办?

这有点棘手,因为您的顺序每年都在变化,因此因子变量转换变得混乱。这是一种使用单独的数值对 x 位置进行排序的方法:

library('data.table')
library('ggplot2')

Test[, Ranking:= rank(-Number, ties.method = 'first'), by = .(Year)]
ggplot(Test, aes(x = Ranking,
                 y = Number, 
                 fill = Substance)) +
  geom_col(position = 'dodge') +
  scale_x_continuous(name = '', breaks = 0) +
  facet_wrap(~Year)

输出: