使用for循环并排保存多个图(来自ggplot2)

时间:2018-02-19 22:28:34

标签: r plot ggplot2

我像这样将ggplot保存在for循环中。我总共有大约300个地块(i = 1,,,300)。我想用pdf文件保存图表,但在pdf文件中保存4个图表(2乘2)。如果是这样,pdf文件的输出应该有75页。

for( i in 1:300){ plot_list[[i]] = ggplot(out, aes(basket_size_group_by2dol, pct_trips_w_item, colour=channel2)) + ylim(min00,max00) + geom_point() }

2 个答案:

答案 0 :(得分:0)

我建议使用cowplotplot_grid()函数,并在网格中附加ggplot2个对象。例如。见:https://cran.r-project.org/web/packages/cowplot/vignettes/plot_grid.html

<强> [编辑]
示例代码(测试代码):

library(cowplot)
library(ggplot2)
dat <- data.frame(x=1:10,y=2*(1:10),z=(1:10)^2)
p1 <- ggplot(dat, aes(x=x, y=y)) + geom_point()
p2 <- ggplot(dat, aes(x=x, y=z)) + geom_point()
plot_grid(p1, p2, labels=c("A","B"))

以下逻辑可以允许将想法扩展到动态for循环:

plotlist <- list(p1,p2)
plot_grid(plotlist=plotlist)

<强> [EDIT2]
这是一个使用split命令的小型演示。我从1到12生成向量x(以相同的方式工作)。然后我生成我的因子f,它定义了组(相同的数字,相同的组)。使用split返回4个x列表,按因子f分组。

x <- 1:12
f <- rep(seq(1,4),each=3)
split(x,f)

$ 1 [1] 1 2 3

$ 2 [1] 4 5 6

$ 3 [1] 7 8 9

$ 4 [1] 10 11 12

您可以与此额外代码进行比较,以了解会发生什么:

f1 <- rep(seq(1,4), times=3)
split(x,f1)

$ 1 [1] 1 5 9

$ 2 [1] 2 6 10

$ 3 [1] 3 7 11

$ 4 [1] 4 8 12

您还可以通过以下方式获取R功能的帮助页面:

?split
?plot_grid

甚至包

?cowplot

答案 1 :(得分:0)

由于您已经生成了一个图表列表,因此可以使用ggsave包中的ggplot2函数和marrangeGrob包中的gridExtra函数生成pdf。这是一个小例子,它生成八个图并将它们保存到一个页面,两页为pdf。

library(ggplot2)
library(gridExtra)

plot_list <- vector("list", 8) 
plot_list[[1]] <- ggplot(mtcars) + aes(x = wt, y = mpg)   + geom_point() + ggtitle("This is plot 1")
plot_list[[2]] <- ggplot(mtcars) + aes(x = cyl, y = mpg)  + geom_point() + ggtitle("This is plot 2")
plot_list[[3]] <- ggplot(mtcars) + aes(x = disp, y = mpg) + geom_point() + ggtitle("This is plot 3")
plot_list[[4]] <- ggplot(mtcars) + aes(x = drat, y = mpg) + geom_point() + ggtitle("This is plot 4")
plot_list[[5]] <- ggplot(mtcars) + aes(x = drat, y = mpg) + geom_point() + ggtitle("This is plot 5")
plot_list[[6]] <- ggplot(mtcars) + aes(x = qsec, y = mpg) + geom_point() + ggtitle("This is plot 6")
plot_list[[7]] <- ggplot(mtcars) + aes(x = vs, y = mpg)   + geom_point() + ggtitle("This is plot 7")
plot_list[[8]] <- ggplot(mtcars) + aes(x = gear, y = mpg) + geom_point() + ggtitle("This is plot 8")


### Use your plot_list here:
glist <- lapply(plot_list, ggplotGrob)
ggsave("plots.pdf", marrangeGrob(glist, nrow = 2, ncol = 2))

enter image description here