如何用ggplot自动化按年份生成带样本量的柱状图并导出PDF?
自动化生成年度柱状图并批量保存
实现步骤与代码
首先加载所需的tidyverse包(包含数据处理、绘图的核心工具):
library(tidyverse)
1. 预处理数据:计算各年份总样本量
先给原数据添加每个年份的总样本量字段,方便后续绘图时调用:
df_with_total <- df %>% group_by(year) %>% mutate(total_n = sum(freq)) %>% # 计算当前年份的总样本量 ungroup()
2. 批量生成带样本量的柱状图
按年份拆分数据,自动生成每个年份的柱状图,并在图表底部标注样本量N:
# 按年份拆分数据集,批量生成图表 plot_list <- df_with_total %>% group_split(year) %>% # 将数据拆分为按年份分组的列表 map(function(sub_df) { # 获取当前年份和对应总样本量 yr <- unique(sub_df$year) n <- unique(sub_df$total_n) ggplot(sub_df, aes(x = col, y = freq)) + geom_col(fill = "steelblue") + labs( title = paste("年份", yr, "频次分布"), x = "类别", y = "频次", caption = paste("N =", n) # 标注样本量 ) + theme_minimal() })
3. 保存图表
方式1:保存为单份多页PDF(每页一个图表)
# 创建PDF文件,设置页面尺寸 pdf("年度频次柱状图合集.pdf", width = 8, height = 6) # 遍历图表列表并打印到PDF walk(plot_list, print) # 关闭PDF设备 dev.off()
方式2:单独保存每个图表为图片文件
如果需要单独保存每个年份的图表,可以生成带年份标识的PNG/JPG文件:
# 获取所有年份标签 year_list <- unique(df$year) # 对应保存每个图表 map2(plot_list, year_list, function(plt, yr) { ggsave( filename = paste0("年份", yr, "_频次柱状图.png"), plot = plt, width = 8, height = 6, dpi = 300 ) })
说明
- 所有步骤完全自动化,无需手动筛选年份或计算样本量
- 图表的样式(颜色、主题)可以根据需求调整,比如修改
geom_col的fill参数或替换theme_minimal为其他主题 - 生成的PDF文件会按年份顺序排列,每页一个图表
内容的提问来源于stack exchange,提问作者dd_data
相关产品推荐
相关产品推荐

