如何基于一个因素从 1 个数据集中迭代构建和导出多个图

How to iteratively build and export multiple graphs from 1 data set based on a factor

假设我有一个包含三个变量的数据文件 (WQ_data_forMultipleStations.csv):StationNameTime_hrDO_mgL。此文件包含 50 个站(station1、station2、station3...station50)的数据。

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

每个图表都具有相同的格式:Time_hr 在 x-axis 上,DO_mgL 在 y-axis 上,StationName 作为图表标题,以及以 JPG 格式导出,文件名为 StationName.jpg.

我是 R 的新手,我已经想出使用 facets 制作一个包含 50 个子图的巨型图(参见下面的代码),但我非常感谢帮助使每个子图成为一个单独的图然后导出50 个图表作为 50 个单独的和 clearly-named 个图像文件。谢谢!

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)

这是一个小例子,说明如何使用 mtcars 数据集

的 for 循环来完成
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...