如何在分组条形图中实现组内升序排列
解决方案
要实现按Region分组且每个Region内条形按var数值从低到高排序,核心是让Country的因子顺序对应「先按Region分组,再按var升序排列」的结果,具体实现如下:
- 先按
Region分组,再按var升序排列数据,确保每个Region内的Country按var从小到大排序 - 将
Country转换为有序因子,因子水平取排序后的Country顺序,这样ggplot会按照这个顺序绘制x轴
完整代码:
library(tidyverse) dat <- tribble( ~Country, ~Region, ~var, "Jordan", "MENA", 42, "Iran", "MENA", 26, "Turkey", "ECA", 37, "Pakistan", "AP", 42, "Indonesia", "AP", 84, "Bangladesh", "AP", 24, "Israel", "MENA", 65 ) dat %>% # 按Region分组,再按var升序排列数据 arrange(Region, var) %>% # 将Country转为有序因子,水平为排序后的顺序;同时保留你设定的Region顺序 mutate(Country = fct_inorder(Country), Region = parse_factor(Region, levels = c("AP", "ECA", "MENA"), ordered = TRUE)) %>% ggplot(aes(x = Country, y = var, fill = Region)) + geom_bar(stat="identity", position = "dodge") + # 可选:旋转x轴标签避免重叠 theme(axis.text.x = element_text(angle = 45, hjust = 1))
效果说明
- 同Region的Country会按你设定的
AP→ECA→MENA顺序归类在一起 - 每个Region内部的条形严格按
var从低到高排列:- AP区域:Bangladesh(24) → Pakistan(42) → Indonesia(84)
- ECA区域:Turkey(37)
- MENA区域:Iran(26) → Jordan(42) → Israel(65)
内容的提问来源于stack exchange,提问作者rez
相关产品推荐
相关产品推荐

