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

如何在R中生成按主类别分组的子类别含纤维产品比例分组条形图

问题:生成按子类别划分并按主类别分组的含纤维产品比例条形图

用户提供的R数据集如下:

df <- data.frame(
    Product = c(755, 728, 417, 355, 913, 634, 385, 208, 204, 696, 968, 816, 279, 869, 823, 646, 986, 674, 806, 335, 731, 734, 107, 105, 512, 859, 159, 113, 353, 105, 205, 919, 243, 717, 838, 408, 423, 357, 408, 464, 724, 643, 943, 648, 623, 451, 449, 135, 842, 711),
    Category = c("Bread", "Cheese", "Bread", "Cheese", "Bread", "Cheese", "Bread", "Bread", "Bread", "Cheese", "Bread", "Bread", "Cheese", "Bread", "Cheese", "Bread", "Bread", "Bread", "Cheese", "Cheese", "Cheese", "Bread", "Bread", "Cheese", "Bread", "Cheese", "Bread", "Bread", "Bread", "Cheese", "Cheese", "Bread", "Bread", "Cheese", "Cheese", "Bread", "Bread", "Bread", "Bread", "Cheese", "Cheese", "Cheese", "Cheese", "Cheese", "Cheese", "Cheese", "Cheese", "Bread", "Bread", "Cheese"),
    Sub_Category = c("White", "Camembert", "White", "Camembert", "White", "Brie", "Brown", "Wholemeal", "White", "Brie", "Wholemeal", "Wholemeal", "Gouda", "Wholemeal", "Camembert", "Brown", "White", "Wholemeal", "Gouda", "Gouda", "Brie", "Wholemeal", "Wholemeal", "Camembert", "White", "Brie", "Wholemeal", "Wholemeal", "Brown", "Brie", "Brie", "White", "Wholemeal", "Camembert", "Gouda", "White", "Wholemeal", "Brown", "White", "Camembert", "Brie", "Brie", "Camembert", "Brie", "Camembert", "Gouda", "Camembert", "Wholemeal", "White", "Camembert"),
    Fibre = c(TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE)
)

需求是创建分组条形图:每个条形对应一个子类别(共6个),展示该子类别中含纤维产品的比例,同时通过颜色区分主类别(Bread/Cheese)。


解决方案

1. 数据预处理:计算各子类别含纤维产品比例

需要同时按**主类别(Category)和子类别(Sub_Category)**分组,计算每个子类别中含纤维产品的占比:

library(tidyverse)

# 计算每个子类别的含纤维比例,保留主类别信息
subcat_proportions <- df %>%
  group_by(Category, Sub_Category) %>%
  summarise(
    Proportion = mean(Fibre) * 100,  # 直接用mean(Fibre),因为TRUE=1,FALSE=0
    .groups = "drop"  # 取消分组,避免后续ggplot警告
  )

2. 绘制分组条形图

用ggplot2绘制条形图,通过fill = Category让主类别对应不同颜色,x轴为子类别,y轴为比例:

ggplot(subcat_proportions, aes(x = reorder(Sub_Category, Proportion), y = Proportion, fill = Category)) +
  geom_col(width = 0.7) +  # geom_col适合已汇总的数值,替代geom_bar(stat="identity")
  labs(
    title = "各子类别含纤维产品比例",
    x = "子类别",
    y = "含纤维产品比例(%)",
    fill = "主类别"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12),
    axis.text.x = element_text(angle = 45, hjust = 1)  # 旋转x轴标签避免重叠
  )

代码说明

  • reorder(Sub_Category, Proportion):让子类别按比例从小到大排序,图表更直观
  • geom_col:直接使用已计算好的比例值绘制条形,比geom_bar(stat="identity")更简洁
  • fill = Category:让不同主类别的条形显示不同颜色,并自动生成图例
  • 主题调整:添加居中标题、旋转x轴标签,提升图表可读性

内容的提问来源于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:27:06