r-将循环绘制的图保存在文件中



我正在使用for循环函数制作ggplots,并希望将所有绘图保存在一个文件中,以便以ppt格式使用。

我使用的代码是

for(i in 1:28) {
plot_i <- ggplot(Num, aes(Num[,i]))+ geom_histogram(fill="skyblue", col="Blue")+
ggtitle(names(Num)[i])+theme_classic()
ggplot2::ggsave(filename = paste0("plot_",i,".png"),plot_i, path = "E:/Folder1")
}

然而,当我打开保存的png文件时,所有28个图中只有1个可见当我检查这些图是否真的制作完成时,或者是否所有的图都是在r studio 中制作的

for(i in 1:28) {
print(ggplot(Num, aes(Num[,i]))+ geom_histogram(fill="skyblue", col="Blue")+
ggtitle(names(Num)[i]))+theme_classic()
}

这些代码有助于我查看所有的情节,但如果我必须保存它,我必须一个接一个地进行,这是一个非常漫长的过程。如果我可以将绘图保存在.doc或.ppt文件中,这将对我有用我在这里检查了类似的问题,但给出的解决方案不起作用。

在您共享的代码中:

for(i in 1:28) {
plot_i <- ggplot(Num, aes(Num[,i]))+ geom_histogram(fill="skyblue", col="Blue")+
ggtitle(names(Num)[i])+theme_classic()
ggplot2::ggsave(filename = paste0("plot_",i,".png"),plot_i, path = "E:/Folder1")
}

您正在将绘图对象存储在变量plot_i中。您没有打印这些绘图。在使用ggplot保存绘图之前,您需要插入print(plot_i)语句,如下所示:

for(i in 1:28) {
plot_i <- ggplot(Num, aes(Num[,i]))+ geom_histogram(fill="skyblue", col="Blue")+
ggtitle(names(Num)[i])+theme_classic()
print(plot_i)
ggplot2::ggsave(filename = paste0("plot_",i,".png"),plot_i, path = "E:/Folder1")
}

需要打印的原因是,ggsave默认保存上次显示的绘图,通过打印,您实际上显示在Rs显示设备上。简单地说,这就是ggsave的作用:

png('file_name.png') #it opens a graphics devices, can be other also like jpeg
print(plot_i) #displays the plot on graphics device
dev.off() #closes the graphic device

试试这个。但它不涉及ggplot2

for(i in 1:28){
jpeg(filename= paste("E:/Folder1/plot_",i,".png", sep= "")
plot_i <- ggplot(Num, aes(Num[,i]))+ geom_histogram(fill="skyblue", col="Blue")+
ggtitle(names(Num)[i])+theme_classic()
print(plot_i)
dev.off()
}

ggplot使用延迟求值,而for循环不使用循环索引的force()求值。lapply确实如此。因此,将for循环更改为lapply

我在这里的回答提供了更多的细节。

最新更新