我像这样将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()
}
答案 0 :(得分:0)
我建议使用cowplot
和plot_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))