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

时间:2019-03-31 14:32:23

标签: r ggplot2 geom-col

我有这种桌子:

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,因子,水平,重新排序等,但都无济于事。我有个R新手,所以现在我真的不知道什么是做我想要的最好的方法。

当我尝试这样绘制时,它会将物质按字母顺序放置:

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

2013年第一年,订单是正确的。我希望每隔一年按降序排列。我该怎么办?

1 个答案:

答案 0 :(得分:0)

这有点棘手,因为您的订购逐年变化,因此因子变量转换变得混乱。这是通过使用单独的数值对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)

输出:

enter image description here