首页 > 解决方案 > 如何根据一个因素从一个数据集中迭代地构建和导出多个图

问题描述

假设我有一个包含三个变量的数据文件 (WQ_data_forMultipleStations.csv):StationNameTime_hrDO_mgL. 该文件包含 50 个站(站 1、站 2、站 3...站 50)的数据。

我想创建和导出 50 个单独的图形,每个站点一个图形,每个图形导出为一个单独的图像文件。

每个图形都将具有相同的格式:Time_hr在 x 轴上,DO_mgL在 y 轴上,StationName作为图形标题,并以 JPG 格式导出,文件名为StationName.jpg。

我是 R 新手,我已经想出使用构面制作一个包含 50 个子图的巨型图(请参见下面的代码),但我非常感谢帮助将每个子图制作为单独的图,然后将 50 个图导出为 50单独且名称清晰的图像文件。谢谢!

library ("ggplot2")
WQ_byStation <- read.csv("WQ_data_forMultipleStations.csv")
WQ_byStation_plots <- ggplot(WQ_byStation, aes(x = Time_hr, y = DO_mgL)) + 
  geom_point() +
  geom_line() +
  facet_wrap(~ StationName)
ggsave(filename="WQ_byStation_plots.jpg", plot=WQ_byStation_plots)

标签: riterationgraphing

解决方案


这是一个小例子,说明如何使用 for 循环和mtcars数据集来完成

for(g in unique(mtcars$gear)) {
  f <- filter(mtcars, gear == g)
  
  p <- ggplot(f, aes(disp, hp)) +
    geom_point()
  
  ggsave(paste0('plot_', g,'.jpg'), p)
}

在你的情况下,它会是这样的

for(s in unique(WQ_byStation$StationName)){
  
  f <- filter(WQ_byStation, StationName == s)
  
  p <- ggplot(f, aes(x = Time_hr, y = DO_mgL)) + 
    geom_point() +
    geom_line() +
    ggtitle(s)
  
  ggsave(paste0(s,'.jpg'), p)
  
}

请注意,您可以通过在 中指定路径来保存到文件夹ggsave。例如my_folder/WQ_bySation...


推荐阅读