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

如何用ggplot为每所高中批量生成单独的大学入学率年度折线图

104所高中独立折线图批量生成方案

两种可直接落地的实现方式,均不需要逐个筛选学校名称:

方式1:分面统一展示(适合快速概览所有学校趋势)

通过ggplot自带的facet_wrap参数自动按学校拆分生成子图,所有子图会排列在同一张画布上:

ggplot(nsc_enroll, aes(x = chrt_grad, y = enrolled)) +
  geom_line() +
  geom_point() +
  # 按学校拆分子图,scales参数设置为free_y可让每个子图Y轴自适应取值范围
  facet_wrap(~school, scales = "free_y") +
  labs(x = "毕业年份", y = "大学入学比例")

如果104个子图排列后太挤,可以调整ncol/nrow参数控制行列数,或者拆分多批次生成。

方式2:批量生成独立图片(适合每个学校单独导出使用)

如果需要每个学校的图单独保存为文件、或者单独调用,用purrr包批量处理最便捷,代码如下:

第一步:批量生成所有学校的图表存入列表

library(tidyverse)

# 按学校拆分数据集,自动生成所有学校的折线图
plot_list <- nsc_enroll %>%
  split(.$school) %>%
  map(~ ggplot(.x, aes(x = chrt_grad, y = enrolled)) +
        geom_line() +
        geom_point() +
        labs(title = paste0(unique(.x$school), " 历年大学入学比例"),
             x = "毕业年份", y = "大学入学比例"))

# 可直接调用任意学校的图,例如查看Alba高中的图表
plot_list[["Alba"]]

第二步:批量导出为独立图片文件

# 所有图片会导出到当前工作目录,文件名为「学校名_入学比例趋势.png」
iwalk(plot_list, ~ ggsave(
  filename = paste0(.y, "_入学比例趋势.png"),
  plot = .x,
  width = 6,
  height = 4,
  dpi = 150
))

基础R循环实现(无需加载purrr)

如果不想引入额外包,用基础循环也可实现相同效果:

# 提取所有不重复的学校名称
all_schools <- unique(nsc_enroll$school)

# 循环生成并导出所有学校的图表
for (school_name in all_schools) {
  tmp_df <- subset(nsc_enroll, school == school_name)
  p <- ggplot(tmp_df, aes(x = chrt_grad, y = enrolled)) +
    geom_line() +
    geom_point() +
    labs(title = paste0(school_name, " 历年大学入学比例"),
         x = "毕业年份", y = "大学入学比例")
  ggsave(paste0(school_name, "_入学比例趋势.png"), p, width = 6, height = 4)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:00:04