我正在使用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
。
我在这里的回答提供了更多的细节。