【问题标题】:Alternate way to arrange barplot (geom_bar)?安排条形图(geom_bar)的替代方法?
【发布时间】:2017-12-19 04:58:59
【问题描述】:

当我使用 ggplot 绘制箱线图时,我会得到这样的图:

使用的R代码:

ggplot(nin) + geom_bar(aes(Planner.Group.No))

但我希望条形图从较大的值变为较小的值,所以我编写了这些附加代码

b <- data.frame(table(x = nin$Planner.Group.No))
b <- arrange(b, Freq)

ggplot(b, aes(x = reorder(x, -Freq), y = Freq)) + geom_bar(stat = "identity")

我想知道在 ggplot 中是否有另一种方法可以避免额外的代码行。

这是nin 数据集的示例:

   Planner.Group.No Order.Status
1               P0B     Finished
2               P0C     Finished
3               P0C     Finished
4               P0A     Finished
5               P0C     Finished
6               P0B     Finished
7               P0C     Finished

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    ggplot2 按顺序打印因子,因此您还可以查看以下两种解决方案。一个使用来自basefactor,另一个使用来自forcatsfct_reorder,我也喜欢并经常使用它,因为当我必须使用自定义订单函数时它的灵活性:

    df <- read.table(text = "Planner.Group.No Order.Status
    1               P0B     Finished
    2               P0C     Finished
    3               P0C     Finished
    4               P0A     Finished
    5               P0C     Finished
    6               P0B     Finished
    7               P0C     Finished", header = TRUE)
    df
    
    
    library(tidyverse) # for ggplot2 and forcats
    
    # using factors
    ggplot(df, aes(x = factor(Planner.Group.No, 
                              levels = names(sort(table(Planner.Group.No), decreasing = T))))) + 
      geom_bar()
    
    # using factors with forcats:
    ggplot(df, aes(x = fct_reorder(f = Planner.Group.No, 
                                   x = Planner.Group.No, 
                                   fun = length, 
                                   .desc = TRUE))) + 
      geom_bar()
    

    【讨论】:

      【解决方案2】:

      您可以按照您想要的顺序传递scale_x_discretelimits 参数x 值向量,所以:

      library(ggplot2)
      
      nin <- data.frame(Planner.Group.No = c("P0B", "P0C", "P0C", "P0A", "P0C", "P0B", "P0C"), 
                        Order.Status = c("Finished", "Finished", "Finished", "Finished", "Finished", "Finished", "Finished"),
                        stringsAsFactors = FALSE)
      
      ggplot(nin, aes(Planner.Group.No)) + 
          geom_bar() + 
          scale_x_discrete(limits = names(sort(-table(nin$Planner.Group.No))))
      

      【讨论】:

        猜你喜欢
        • 2018-06-23
        • 2021-10-02
        • 2023-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多