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
相关产品推荐
相关产品推荐

