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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:51:20