r - 使用 ggplot2 重新排序条形图

r - reordering of barplot with ggplot2

在已发布答案的 ggplot2::geom_bar 和 none 中寻找如何重新排序栏有助于解决问题。

一个可重现的例子:

# sample dataframe
cf <- data.frame(a = rnorm(1000, mean = 50, sd = 50))

# just creating additional column to be used for grouping
cf <- cf %>% mutate(year = ifelse(row_number() <= 500, 2015, 2016))

#counting the occurences
cf <- cf %>% mutate(a = round(a, digits = 0)) %>% group_by(year, a) %>% count() %>% ungroup()

# plotting the result
ggplot(cf) + geom_bar(aes(reorder(a,-n),n), stat = "identity") + facet_wrap(~year)

条形必须从最高到最低。已经发布了很多类似的问题,但其中 none 解决了这个问题。

我尝试了这个问题的答案:Reorder bars in geom_bar ggplot2 来生成下面上传的图表,但是这并没有解决问题,显然这些条仍然没有重新排序。

您的数据存在问题,2015 年和 2016 年这两年的级别排序不同。

当你 split 数据时, reorder 分开然后使用 gridExtra 将它们放在一起,你会得到想要的结果:

df <- split(cf, cf$year)

p <- lapply(df, function(x){
  ggplot(x) + geom_bar(aes(reorder(a, -n), n), stat = "identity")
})

library(gridExtra)
grid.arrange(p[[1]], p[[2]], ncol = 2)

结果图: