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

