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

如何使用ggplot绘制X轴为非数值型的含三个变量的柱状图

问题原因

你现有代码不符合预期的核心原因有两点:

  • 没有在美学映射aes()中指定Y轴为总销售额字段,ggplot无法识别你要展示的数值维度
  • 使用geom_bar(position = "fill")默认会生成占比堆积柱状图,仅展示分组占比(数值范围0-1),不会展示实际销售额,且geom_bar()默认对原始数据做计数统计,不适用于你已经聚合好的总销售额数据集

解决代码

注意:你原数据中总销售额的列名带有空格,引用时需要用反引号包裹Total Sales,如果已经重命名为无空格的列名(如Total_Sales)直接替换即可。

方案1:堆积柱状图

同一生命周期下的不同客户等级柱子堆叠展示,既可以看每个生命周期的总销售额,也可以看各客户等级的贡献占比:

ggplot(Total_Sales, aes(x = LIFESTAGE, y = `Total Sales`, fill = PREMIUM_CUSTOMER)) +
  geom_col(position = "stack") +
  labs(x = "生命周期", y = "总销售额", title = "各生命周期不同客户等级销售额分布") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1))

方案2:簇状柱状图

同一生命周期下的不同客户等级柱子并排展示,方便横向对比同生命周期下不同客户等级的销售额差异:

ggplot(Total_Sales, aes(x = LIFESTAGE, y = `Total Sales`, fill = PREMIUM_CUSTOMER)) +
  geom_col(position = position_dodge(width = 0.9), width = 0.8) +
  labs(x = "生命周期", y = "总销售额", title = "各生命周期不同客户等级销售额对比") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1))

补充说明

geom_col()和geom_bar()的核心区别是:geom_col()默认直接使用指定的y轴数值作为柱子高度,适合已经聚合完成的汇总数据;geom_bar()默认对原始数据做行数计数统计,适合未聚合的明细数据,你当前的数据集已经是按两个维度聚合好的总销售额,用geom_col()更适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:36:03