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)
结果图:
在已发布答案的 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)
结果图: