0

我有这种表:

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。我无法按照我想要的顺序按降序排列。

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

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

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

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

4

1 回答 1

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)

输出:

在此处输入图像描述

于 2019-03-31T15:50:25.773 回答