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

如何在ggplot中生成按月份计算收入占比的分组柱状图?

修改方案

问题核心是你当前代码里的sum(income)是对整个数据集求和,要改成按月份分组计算当月总收入,再计算品类收入占当月的比例。以下是修改后的完整代码:

library(tidyverse)
library(scales)

df |> 
  group_by(month, category) |>
  summarize(income = sum(income, na.rm=TRUE), .groups = "drop_last") |> # 保留month分组
  mutate(month_total = sum(income), # 计算当月所有品类的总收入
         monthly_pct = income / month_total) |> # 计算当月内的占比
  ggplot(aes(x=month,y=income, fill=category)) +
  geom_bar(position="dodge", stat="identity") + 
  geom_text(aes(label=percent(monthly_pct)), position = position_dodge(width=0.9), angle = 90, hjust=-0.1) +
  labs(x="Month",y="Income") +
  ylim(0, 4000)

关键修改点:

  • 在summarize中添加.groups = "drop_last":默认summarize会取消所有分组,这个参数让我们只去掉最内层的category分组,保留month分组,方便后续计算当月总收入。
  • 新增mutate步骤:计算每个月的总收入month_total,再用品类收入除以该值得到当月占比monthly_pct。
  • 把geom_text中的占比计算替换为提前算好的monthly_pct,确保是基于当月的比例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:21