当我使用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
答案 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))))