当前位置:   article > 正文

R语言ggplot2循环中保存图片失败问题_r语言循环保存图片

r语言循环保存图片

1.问题描述

在使用R语言ggplot2绘图时,需要保存多个图片结果,所以使用循环。
结果,ggplot2放在循环中时,如果使用创建图片(pdf("filename.pdf") 或 png("filename.png") etc...)和关闭图片(dev.off())的命令,需要注意。

例如,使用下面的代码,想要循环产生3个pdf图片文件(循环外,单个图片操作没问题),循环中这样使用不能保存图片代码不报错

require(ggplot2)
for(i in 1:3){
  pdf(paste( i, ".pdf", sep=""))
  ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length)) +
    geom_point(aes(color=Species), size=3) +
    scale_color_brewer(palette = "Set2")
  dev.off()}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

实际上生成的3个pdf文件没有图片内容,实际上并没有将缓存中图片释放保存到PDF中。
在这里插入图片描述

在这里插入图片描述当然,如果不使用ggplot2也没这问题,也能正常保存
例如:

for(i in 1:3){
  pdf(paste( i, ".pdf", sep=""))
  plot(1:10)
  dev.off()}
  • 1
  • 2
  • 3
  • 4

结果没问题:
在这里插入图片描述
在这里插入图片描述

2.问题解决
2.1 使用ggsave函数保存,成功
for(i in 1:3){
  ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length)) +
    geom_point(aes(color=Species), size=3) +
    scale_color_brewer(palette = "Set2")
  ggsave(paste( i, ".pdf", sep=""))}
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
在这里插入图片描述

2.2 使用print函数输出,成功
require(ggplot2)
for(i in 1:3){
  pdf(paste( i, ".pdf", sep=""))
  p1 <- ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length)) +
    geom_point(aes(color=Species), size=3) +
    scale_color_brewer(palette = "Set2")
  print(p1)   ## 添加p1 print操作
  dev.off()}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
在这里插入图片描述

以上,使用ggplot2循环保存pdf时需要注意这一点,即可成功保存文件。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/132119
推荐阅读
相关标签
  

闽ICP备14008679号