替代方式来安排barplot(geom_bar)?

时间:2017-12-19 04:59:00

标签: r ggplot2

当我使用ggplot绘制一个盒子图时,我得到一个这样的图:

plot before making additional data frame

使用了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")

Desired plot

我想知道在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

2 个答案:

答案 0 :(得分:2)

ggplot2按照它们的顺序打印因子,因此您也可以查看下面的两个解决方案。一个使用factor中的base,另一个使用来自fct_reorder的{​​{1}},我也非常喜欢和使用它,因为我必须使用自定义订单功能时具有灵活性:

forcats

答案 1 :(得分:1)

您可以按照您想要的顺序传递limits参数scale_x_discrete 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))))