【问题标题】:Sort or order multiple bars with geom_col barplot使用 geom_col barplot 对多个条进行排序或排序
【发布时间】:2019-03-31 14:32:22
【问题描述】:

我有这种桌子:

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 年的第一年,顺序是正确的。我希望它看起来像这样,按降序排列,每隔一年。我该怎么办?

【问题讨论】:

    标签: r ggplot2 geom-col


    【解决方案1】:

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

    输出:

    【讨论】:

    • 感谢您的快速回答 :) 当我尝试您的解决方案时,出现以下错误: FUN(X[[i]], ...) 中的错误:找不到对象“排名”我已经有了 ggplot2 和 data.table 包,所以我不明白这个错误来自哪里
    • 没问题。听起来您还没有分配“排名”变量-确保您正在运行第一行代码:Test[, Ranking:= rank(-Number, ties.method = 'first'), by = .(Year)],如果可行,请接受答案:)
    • 是的,我这样做了,但它说:[.tbl_df(Test, , :=(Ranking, rank(-Number, ties.method = "first")) 中的错误,: 未使用当我尝试运行第一行时的参数(by = .(Year))别担心,我会接受它:)
    • 确保您已安装并附加了data.table
    • 还要确保在运行代码之前“测试”data.table 对象:Test <- as.data.table(Test)
    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 2010-09-26
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多