使用 R 中的 for 循环为每个因素打印多个 ggplots
Print multiple ggplots for each factor using a for loop in R
我是 R 的新手,这是我在 Whosebug 上的第一个问题,所以如果有任何不清楚的地方请告诉我!
我有一个由因子变量 df$site 拆分的大型数据集。
对于每个站点,我需要打印几个图(比如 A 和 B)。到目前为止,我已经设法将所有绘图单独打印为单独的 PDF 文件(使用下面的代码)。
但是,我需要将这些图分组到一个大的 PDF 中 - 每个页面都包含每个站点的图 A 和图 B,例如
第 1 页 - 站点 1 - 地块 A1,地块 B1
第 2 页 - 站点 2 - 地块 A2、地块 B2(依此类推)。
我将非常感谢有关如何执行此操作的一些建议!
doplot = invisible(by(df, df$site, function(i) {
A <- ggplot(i, aes(x, y1))+ geom_point() + ggtitle(unique(i$site))
B <- ggplot(i, aes(x, y2))+ geom_point() + ggtitle(unique(i$site))
ggsave(sprintf("%s_A.pdf", unique(i$site)), A)
ggsave(sprintf("%s_B.pdf", unique(i$site)), B)
}))
lapply(unique(df$site), doplot)
我不确定如何 post 样本数据,所以这是一个简化的样本:
site x y1 y2
site_1 3.56 0.337674318 1.935941597
site_1 4.31 1.559665628 2.402924583
site_1 4.36 1.523297984 2.600534832
site_1 5.03 2.261701756 2.394485714
site_1 5.23 2.573428703 2.686396123
site_1 5.33 2.582030907 2.600534832
site_1 5.69 2.842581635 2.723667517
site_2 3.79 2.793543915 3.265708161
site_2 4.49 3.353407259 3.701443333
site_2 4.88 3.363259555 3.733048672
site_2 4.94 3.550471097 3.780780075
site_2 4.88 3.590317006 3.848359519
site_2 5.31 3.708100041 3.922750337
site_2 5.26 3.735499016 3.906067837
site_2 4.22 3.074269438 4.091499816
site_2 6.72 4.329273722 4.35481919
site_2 6.46 4.283464186 4.326989203
我上传了一个示例 .csv 文件 here。
谢谢!
您可以使用 ggplot2
分面将所有绘图放在同一页上:
ggplot(df, aes(x=x, y=y1)) +
geom_point() +
facet_grid(. ~ site)
@Luise,使用您的 'sample.csv' 文件,这将为您提供要求的文件,每页 2 个图,按 'site' 分组。 (确保变量 'site' 是一个因素。您应该使用 'str(df)' 检查它)。我使用 'grid.Extra' 包中的 'grid.arrange' 函数来放置绘图。如果 pdf 函数中没有名称参数,绘图将打印到默认的 'Rplots.pdf' 文件。
require(ggplot2)
require(gridExtra)
pdf(onefile = TRUE)
for(i in 1:length(levels(df$site))){
A <- ggplot(df[df$site == levels(df$site)[i],], aes(x=x, y=y1)) + geom_point() + ggtitle(levels(df$site)[i])
B <- ggplot(df[df$site == levels(df$site)[i],], aes(x=x, y=y2)) + geom_point() + ggtitle(levels(df$site)[i])
grid.arrange(A, B)
}
dev.off()
您可以下载输出文件here。
我是 R 的新手,这是我在 Whosebug 上的第一个问题,所以如果有任何不清楚的地方请告诉我!
我有一个由因子变量 df$site 拆分的大型数据集。
对于每个站点,我需要打印几个图(比如 A 和 B)。到目前为止,我已经设法将所有绘图单独打印为单独的 PDF 文件(使用下面的代码)。
但是,我需要将这些图分组到一个大的 PDF 中 - 每个页面都包含每个站点的图 A 和图 B,例如
第 1 页 - 站点 1 - 地块 A1,地块 B1
第 2 页 - 站点 2 - 地块 A2、地块 B2(依此类推)。
我将非常感谢有关如何执行此操作的一些建议!
doplot = invisible(by(df, df$site, function(i) {
A <- ggplot(i, aes(x, y1))+ geom_point() + ggtitle(unique(i$site))
B <- ggplot(i, aes(x, y2))+ geom_point() + ggtitle(unique(i$site))
ggsave(sprintf("%s_A.pdf", unique(i$site)), A)
ggsave(sprintf("%s_B.pdf", unique(i$site)), B)
}))
lapply(unique(df$site), doplot)
我不确定如何 post 样本数据,所以这是一个简化的样本:
site x y1 y2
site_1 3.56 0.337674318 1.935941597
site_1 4.31 1.559665628 2.402924583
site_1 4.36 1.523297984 2.600534832
site_1 5.03 2.261701756 2.394485714
site_1 5.23 2.573428703 2.686396123
site_1 5.33 2.582030907 2.600534832
site_1 5.69 2.842581635 2.723667517
site_2 3.79 2.793543915 3.265708161
site_2 4.49 3.353407259 3.701443333
site_2 4.88 3.363259555 3.733048672
site_2 4.94 3.550471097 3.780780075
site_2 4.88 3.590317006 3.848359519
site_2 5.31 3.708100041 3.922750337
site_2 5.26 3.735499016 3.906067837
site_2 4.22 3.074269438 4.091499816
site_2 6.72 4.329273722 4.35481919
site_2 6.46 4.283464186 4.326989203
我上传了一个示例 .csv 文件 here。 谢谢!
您可以使用 ggplot2
分面将所有绘图放在同一页上:
ggplot(df, aes(x=x, y=y1)) +
geom_point() +
facet_grid(. ~ site)
@Luise,使用您的 'sample.csv' 文件,这将为您提供要求的文件,每页 2 个图,按 'site' 分组。 (确保变量 'site' 是一个因素。您应该使用 'str(df)' 检查它)。我使用 'grid.Extra' 包中的 'grid.arrange' 函数来放置绘图。如果 pdf 函数中没有名称参数,绘图将打印到默认的 'Rplots.pdf' 文件。
require(ggplot2)
require(gridExtra)
pdf(onefile = TRUE)
for(i in 1:length(levels(df$site))){
A <- ggplot(df[df$site == levels(df$site)[i],], aes(x=x, y=y1)) + geom_point() + ggtitle(levels(df$site)[i])
B <- ggplot(df[df$site == levels(df$site)[i],], aes(x=x, y=y2)) + geom_point() + ggtitle(levels(df$site)[i])
grid.arrange(A, B)
}
dev.off()
您可以下载输出文件here。