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

如何在分组条形图中按类别分组并降序排列相关条形?

调整条形图的排序逻辑

要实现先按Category分组(Bread类条形全部在前,Cheese类在后),同类别内按Proportion降序排列,最终达到你要的white, wholemeal, brown, brie, camembert, gouda顺序,有两种可行方案:

方案1:动态根据类别和比例排序

这种方式会自动根据数据中的比例值调整顺序,适合数据可能更新的场景:

library(tidyverse)

proportions <- df %>%
  group_by(Category, Sub_Category) %>%
  summarise(Proportion = mean(Fibre == TRUE) * 100, .groups = 'drop') %>%
  # 先按Category排序(字符排序下Bread自然在Cheese之前),再按比例降序
  arrange(Category, desc(Proportion)) %>%
  # 将Sub_Category转为有序因子,水平为排序后的唯一值
  mutate(Sub_Category = factor(Sub_Category, levels = unique(Sub_Category)))

ggplot(data = proportions, aes(x = Proportion, y = Sub_Category, fill = Category)) +
  geom_col(position = "dodge") +
  labs(fill = "Category")

方案2:手动固定目标顺序

如果你已经确定了最终要的条形顺序,直接手动指定因子水平即可:

library(tidyverse)

proportions <- df %>%
  group_by(Category, Sub_Category) %>%
  summarise(Proportion = mean(Fibre == TRUE) * 100, .groups = 'drop') %>%
  # 严格按照你要求的顺序设置因子水平
  mutate(Sub_Category = factor(Sub_Category, levels = c("White", "Wholemeal", "Brown", "Brie", "Camembert", "Gouda")))

ggplot(data = proportions, aes(x = Proportion, y = Sub_Category, fill = Category)) +
  geom_col(position = "dodge") +
  labs(fill = "Category")

两种方案都能实现你要的效果:方案1会随数据中比例变化自动调整同类别内的条形顺序,方案2则固定为你指定的顺序,不会随数据变化改变。

内容的提问来源于stack exchange,提问作者Jay Bee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:58:23