【问题标题】:ggplot2 bar-chart order by values of one groupggplot2条形图按一组值排序
【发布时间】:2020-05-25 21:59:35
【问题描述】:

我正在尝试在 ggplot 中订购条形图。 我正在尝试做这些并排的条形图之一。我有 2 组的数据,我想按一组的值对图进行排序。目前,我的情节是这样的:

我想实现这个:

图中按第 1 组的递减值排序(此处为蓝色)。 我怎么做?我在组内的类别上尝试了 fct_reorder,安排、排序、排序,设法在 ggplot 之外对其进行排序,但结果并非如此......任何帮助将不胜感激!

编辑: 根据建议我尝试了以下方法:

data %>% 
  ggplot(aes(x = fct_rev(fct_reorder(labels, value)), y = value, fill 
  = variable)) +
   geom_bar(stat="identity", width=.5, position = "dodge")  +
   theme(axis.text.x = element_text(angle = 90, hjust = 1))

我得到了:

这不是我真正想要的。我想按选定的(红色条)降序排序。 Selected 和 new 显然是一个变量,所以在一列中。如果我必须将它们分开,那很好,我只是不知道如何。

数据:

structure(list(labels = c("3", "16", 
                      "20", "15", "2", 
                      "11", "19", 
                      "8", "1", 
                      "9", "12", "14", 
                      "22", "6", "5", 
                      "18", "17", "23", 
                      "21", "13", "7", 
                      "10", "4", "3", "16", 
                      "20", "15", "2", 
                      "11", "19", 
                      "8", "1", 
                      "9", "12", "14", 
                      "22", "6", "5", 
                      "18", "17", "23", 
                      "21", "13", "7", 
                      "10", "4"), variable = structure(c(1L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                          1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                          2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("selected", "new"), class = "factor"), value = c(14.6323031713383, 15.9559892686597, 
                                                                                                                                                                                                  17.8080362595634, 17.9067064016601, 24.0164577112395, 24.8811598509513, 
                                                                                                                                                                                                  26.6357978795688, 26.8956804786175, 29.9814126083425, 32.0991304536091, 
                                                                                                                                                                                                  32.1102536829839, 35.4868462306579, 38.1006034580602, 51.1456293356122, 
                                                                                                                                                                                                  51.3589926258885, 52.1663444535308, 54.5568962268846, 55.046508165816, 
                                                                                                                                                                                                  57.3540750283887, 59.4724704424851, 66.1242468388916, 76.0316429487087, 
                                                                                                                                                                                                  81.2328164785417, 0.852076511173202, 14.5657895883356, 12.879854304722, 
                                                                                                                                                                                                  5.64377267586918, 7.1645313211506, 22.9837800173366, 25.5540168398152, 
                                                                                                                                                                                                  22.2012270424052, 23.9767694081375, 23.8383007367455, 29.8528524241582, 
                                                                                                                                                                                                  35.157323503853, 3.57512478022716, 2.79829414578611, 25.7839377086262, 
                                                                                                                                                                                                  1.61935008218228, 36.4318154009141, 41.9502761903778, 43.6568981148706, 
                                                                                                                                                                                                  50.8270620551394, 25.1245202778254, 17.0173820081843, 32.5450448621647
                                                                                                                                                             )), row.names = c(NA, -46L), class = "data.frame")

【问题讨论】:

    标签: r ggplot2 bar-chart


    【解决方案1】:

    在调用ggplot 之外处理数据以确定您感兴趣的分组变量(标签)的因子顺序。然后将此因子应用于ggplot 中的标签变量。

    library(ggplot2)
    library(dplyr)
    
    sel_order <- 
      data %>% 
      filter(variable == "selected") %>% 
      arrange(desc(value)) %>% 
      mutate(labels = factor(labels))
    
    
    data %>% 
      mutate(labels = factor(labels, levels = sel_order$labels, ordered = TRUE)) %>% 
      ggplot(aes(x = labels, y = value, fill = variable), group = labels) +
      geom_bar(stat="identity", width=.5, position = "dodge")  +
      theme(axis.text.x = element_text(angle = 90, hjust = 1))
    

    reprex package (v0.3.0) 于 2020 年 5 月 26 日创建

    【讨论】:

    • 很遗憾没有用。这也是我得到的。请参阅上面的编辑。
    • 能否将您的数据粘贴到问题中?使用dput(data) 这将使您的问题可重现,并且其他人可以测试和验证解决方案。问题是每个数据集都有自己的特点。
    • 我可以通过对ggplot 调用之外的数据进行预处理来做到这一点,以使label 变量成为具有值序列中因子顺序的因子。
    • 如果有帮助,您可以随时为答案投票!
    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多