如何使用ggplot2绘制不同数据集同一变量的分性别计数折线图
实现方案
不需要手动整合计数,用R的批量列表处理逻辑可以一步完成数据汇总+绘图,后续新增波次数据也可以直接复用代码,扩展性和准确率都更高。
依赖包
需要提前安装加载tidyverse套件,包含数据处理用的dplyr、purrr和绘图用的ggplot2:
library(tidyverse)
步骤1:批量汇总计数
把3个数据集打包成命名列表,自动批量统计每个数据集的分性别计数,直接生成绘图用的长表:
# 打包成命名列表,列表名自动对应x轴的v1/v2/v3标识 dat_list <- lst(v1, v2, v3) # 批量统计分性别计数,合并为绘图数据集 plot_dat <- dat_list %>% map_df(~ count(.x, gender), .id = "wave")
运行后生成的plot_dat已经包含所有绘图需要的字段:wave列对应波次(v1/v2/v3)、gender列对应性别、n列对应计数。
步骤2:绘图
直接用生成的数据集绘制要求的点线图:
ggplot(plot_dat, aes(x = wave, y = n, color = gender, group = gender)) + geom_line(linewidth = 1) + # 同性别连线 geom_point(size = 3) + # 标记数值点 labs(x = "数据集/波次", y = "分性别计数", color = "性别") + theme_bw()
如果需要在点上直接显示数值,可以在绘图代码中加一行geom_text(aes(label = n), vjust = -0.8)。
方案优势
- 无任何手动统计、手动拼接步骤,避免人为计算错误
- 扩展性强,后续新增v4、v5等波次数据时,只需要把新数据集加入
lst(v1, v2, v3, v4, v5)即可,后续统计、绘图代码完全不需要修改 - 自动保留波次的顺序为v1→v2→v3,不需要额外调整x轴因子水平
内容的提问来源于stack exchange,提问作者YYM17
相关产品推荐
相关产品推荐

