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

R语言绘制分月份分性别消费统计柱状图问题求助

R语言双维度分组柱状图绘制解决方案

核心错误点

  • 未将gender字段正确映射到可视化维度:原代码中group = "gender"是将固定字符串作为分组规则,没有引用数据集中的性别字段,也没有映射填充色,无法区分不同性别的数据
  • 填充色固定为单一红色,视觉上无法拆分两个维度的结果
  • 未设置柱子避让规则,同月份不同性别的柱子会完全重叠,最终仅能看到顶层的一组数据

修正后可运行代码

如果你现有数据集已经提前聚合好了月份、性别、消费次数字段,不需要再走统计流程,直接替换下方代码中的数据集名和对应字段名即可。

并列分组柱状图(最符合需求的展示形式)

library(tidyverse)

gender_count_plot <- x %>% 
  select(date, gender) %>% 
  # 格式化月份为“X月”格式,和示例数据匹配,若需要英文月份可改回"%B"
  mutate(month = format(date, "%m月")) %>% 
  group_by(month, gender) %>% 
  # 直接对计数结果命名,后续调用更清晰
  count(name = "消费次数") %>% 
  ungroup() %>% 
  # 核心:将gender映射为填充色,自动实现双维度分组
  ggplot(aes(x = month, y = 消费次数, fill = gender)) +
  # geom_col等价于geom_bar(stat = "identity"),写法更简洁
  # position_dodge实现同月份柱子横向避让不重叠
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  # 可选:自定义性别对应的填充色
  scale_fill_manual(values = c("男性" = "#2E86AB", "女性" = "#F24C4C")) +
  # 可选:在柱子顶部添加数值标签
  geom_text(aes(label = 消费次数), position = position_dodge(width = 0.8), vjust = -0.3)
# 输出图表
print(gender_count_plot)

堆叠柱状图(可选展示形式)

如果需要展示每个月的总消费次数及性别占比,仅需要修改geom_col的position参数即可:

geom_col(position = position_stack(), width = 0.7)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:06:04