1

我想通过 for 循环将多个 ggplots 保存为 jpeg。但是当我尝试修改我为基本绘图命令编写的代码时,我没有得到任何输出(没有任何内容保存到我的工作目录中)。

例如,这很好用:

library(cowplot)
library(ggplot)

X<-c(1,2,3,4,5,6,7,8,9)
Y1<-c(2,3,4,4,3,2,4,5,6)
Y2<-c(3,4,5,3,2,1,1,2,3)
Y3<-c(4,5,6,7,8,9,8,7,6)

DF<-data.frame(X,Y1,Y2,Y3)



for(i in 1:3){


    jpeg(paste(i,".jpeg",sep=""))
    plot(DF[,1],DF[,i+1])
    dev.off()
}

我最终将三个 jpeg 文件保存到我的工作目录中。

我不确定如何在此处正确索引 ggplot 调用 i,但即使这样也应该返回相同图的 3 个实例:

for(i in 1:3){


    jpeg(paste(i,".jpeg",sep=""))
    ggplot(data=DF,aes(x=X,y=Y1))+geom_line()
    dev.off()
}

最后,我希望将多个图合并到一个 jpeg 上,然后像这样保存多个 jpeg:

for(i in 1:3){


    jpeg(paste(i,".jpeg",sep=""))
    A<-ggplot(data=DF,aes(x=X,y=Y1))+geom_line()
    B<-ggplot(data=DF,aes(x=X,y=Y2))+geom_line()
    C<-ggplot(data=DF,aes(x=X,y=Y3))+geom_line()
    plot_grid(A,B,C)

    dev.off()
}

所以这个图还应该返回同一个图的 3 个实例,它们都具有不同的索引文件名。但同样,我什么也没得到。

所以我的问题是为什么在这个 for 循环中通用绘图和 ggploting 之间存在差异。以及如何从上面的 ggplots 中保存多个 jpeg?

4

2 回答 2

2

怎么样

library(gridExtra) # gridExtra::arrangeGrob

for(i in 1:3) {

    jpeg(paste0(i, ".jpg"))
    A <- ggplot(data = DF, aes(x = X, y = Y1)) + geom_line()
    B <- ggplot(data = DF, aes(x = X, y = Y2)) + geom_line()
    C <- ggplot(data = DF, aes(x = X, y = Y3)) + geom_line()
    grid.arrange(arrangeGrob(A, B, C, ncol = 3))
    dev.off()

}

注意:此解决方案不会产生cowplot(“A”,“B”,“C”)的侧面注释。

于 2017-01-15T19:19:27.443 回答
0

使用您的代码:

for(i in 1:3){


    jpeg(paste(i,".jpeg",sep=""))
    A<-ggplot(data=DF,aes(x=X,y=Y1))+geom_line()
    B<-ggplot(data=DF,aes(x=X,y=Y2))+geom_line()
    C<-ggplot(data=DF,aes(x=X,y=Y3))+geom_line()
    k<-plot_grid(A,B,C)

    ggsave(k, filname = "path/finalplot.jpeg")
}

查看?ggsave其他参数以指定类似heightwidth

于 2017-01-15T19:51:55.640 回答