You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在分组条形图中实现组内升序排列

解决方案

要实现按Region分组且每个Region内条形按var数值从低到高排序,核心是让Country的因子顺序对应「先按Region分组,再按var升序排列」的结果,具体实现如下:

  1. 先按Region分组,再按var升序排列数据,确保每个Region内的Country按var从小到大排序
  2. 将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:37:37