r - 如何根据一个因素从一个数据集中迭代地构建和导出多个图
问题描述
假设我有一个包含三个变量的数据文件 (WQ_data_forMultipleStations.csv):StationName
、Time_hr
和DO_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)
解决方案
这是一个小例子,说明如何使用 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...
推荐阅读
- docker - 在 Jenkins-Docker 容器中使用的 Docker SMTP 容器
- reactjs - React 中的响应式设计
- sql-server-data-tools - 如果未提供 sqlcmd 变量,则 sqlpackage 发布失败
- google-bigquery - 如何知道我的表中有哪些属于 bigQuery 中的长期存储?
- java - 如何解决 JavaFX 使用弹出通知的问题
- python - 熊猫:如何累积回报 - 预测价格
- javascript - 哪些组件正在添加情感 css 全局样式
- java - 无法通过 Java 代码执行 java -jar 命令
- python - 通过 UDP 发送浮点结构
- r - 如何从收益率曲线中获得不同的期限