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

在R中使用ggplot2复现Excel分组求和MaleCount的折线图问题

实现方案

核心思路

要复现Excel透视表分组求和后的折线图,需要先按照*年龄段(AgeBand)和卫生委员会(OrgCode,你代码中误写为HealthBoard)*对MaleCount做分组求和,再用聚合后的数据绘图。

依赖包

需要提前加载tidyverse套件(包含数据处理用的dplyr和绘图用的ggplot2):

library(tidyverse)

方法1:先聚合数据再绘图(逻辑和Excel透视表完全一致)

步骤1:生成聚合数据集

df_agg <- df %>%
  # 剔除年龄分组为空的无效记录
  filter(!is.na(AgeBand)) %>%
  # 按两个维度分组,和Excel透视表的分组逻辑完全对应
  group_by(AgeBand, OrgCode) %>%
  # 对男性人数求和
  summarise(total_male = sum(MaleCount), .groups = "drop")

步骤2:绘制折线图

ggplot(df_agg, aes(x = AgeBand, y = total_male, color = factor(OrgCode))) +
  geom_line(linewidth = 1) +
  # 自定义图表标签
  labs(
    title = "2020年4月NHS Wales各卫生委员会不同年龄段男性登记人数",
    x = "年龄段",
    y = "男性总人数",
    color = "卫生委员会编码"
  ) +
  theme_minimal()

方法2:无需预聚合,直接在ggplot内完成计算

如果不想额外生成聚合表,可以直接用stat_summary函数在绘图时自动完成分组求和:

df %>%
  filter(!is.na(AgeBand)) %>%
  ggplot(aes(x = AgeBand, y = MaleCount, color = factor(OrgCode), group = factor(OrgCode))) +
  # 指定求和为聚合函数,输出折线图层
  stat_summary(fun = sum, geom = "line", linewidth = 1) +
  labs(
    title = "2020年4月NHS Wales各卫生委员会不同年龄段男性登记人数",
    x = "年龄段",
    y = "男性总人数",
    color = "卫生委员会编码"
  ) +
  theme_minimal()

原有代码问题说明

  • 未对MaleCount做分组求和,直接使用原始明细行数据绘图,和Excel结果逻辑不一致
  • 原数据集中卫生委员会的字段名为OrgCode,代码中误写为HealthBoard导致分组失效
  • 未显式设置group映射,ggplot无法正确识别分组规则绘制多条折线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:18:02