在R中循环保存多个图

Posted

技术标签:

【中文标题】在R中循环保存多个图【英文标题】:Save multiple plots in loop in R 【发布时间】:2019-04-15 10:21:11 【问题描述】:

我想使用循环将多个绘图保存为 png。不幸的是,循环似乎不起作用,因为保存和绘制一个情节是有效的,但如果我在循环中这样做,则什么也没有保存。我也没有收到错误消息。什么都没有发生。

这是有效的代码:

name = main_emo[i]
  mypath=file.path("/Users/Jasmin/Documents/Psychologie/Master/Masterarbeit/Working directory", name)

  png(mypath)

  qplot(x_emo,y_emo, main = main_emo[i]) + geom_errorbar(aes(x=x_emo, ymin=y_emo-sd, ymax=y_emo+sd), width=0.25) + ylab("Rating") + xlab("Emotion")+
    theme(panel.grid.major = element_blank()) +  scale_y_continuous(breaks=seq(1,7,1)) + expand_limits(y=7)

  dev.off()

这是它不再起作用的循环:

main_emo <- c("Emotion Profile Funeral", "Emotion Profile Wedding", "Emotion Profile Destroyed Street","Emotion Profile Destroyed Street")  

frame_name <- c("nice", "wedd", "des", "fun")
emo_mean <- c("rmean_EM_Trauer_", "rmean_EM_Freude_","rmean_EM_Angst_", "rmean_EM_Aerger_", "rmean_EM_Ekel_", "rmean_EM_Ueber_")


for (i in 1: length(frame_name)) 
  y_emo <- c()
  sd <- c()
  x_emo <- c("Trauer", "Freude", "Angst", "Aerger", "Ekel", "Üeberraschung")

  for (j in 1: length(emo_mean)) 
    y_col <- unlist(pre_sub[colnames(pre_sub) == paste0(emo_mean[j], frame_name[i])], use.names=FALSE)
    y_emo <- c(y_emo, mean(y_col, na.rm=TRUE))
    sd <- c(sd, sd(y_col, na.rm=TRUE))
  

  name = main_emo[i]
  mypath=file.path("/Users/Jasmin/Documents/Psychologie/Master/Masterarbeit/Working directory", name)

  png(mypath)

  qplot(x_emo,y_emo, main = main_emo[i]) + geom_errorbar(aes(x=x_emo, ymin=y_emo-sd, ymax=y_emo+sd), width=0.25) + ylab("Rating") + xlab("Emotion")+
    theme(panel.grid.major = element_blank()) +  scale_y_continuous(breaks=seq(1,7,1)) + expand_limits(y=7)

  dev.off()

感谢您的帮助!

【问题讨论】:

检查mypath 是否包含指定路径和名称的正确字符向量。 working directory 中的空格可能会导致问题。 您正在使用来自ggplot2qplot(),因此您可能会更幸运地使用ggsave() 【参考方案1】:

使用ggsave()

不起作用:

library("ggplot2")
for (i in unique(diamonds$color)) 
  png(paste0("~/Desktop/colour_", i, ".png"))
  ggplot(diamonds, aes(carat, price)) + geom_point()
  dev.off()

有效:

for (i in unique(diamonds$color)) 
  ggplot(diamonds, aes(carat, price)) + geom_point()
  ggsave(paste0("~/Desktop/color_", i, ".png"))

【讨论】:

很高兴它成功了。如果这解决了您的问题,请勾选接受答案,以便其他人可以看到问题已解决。

以上是关于在R中循环保存多个图的主要内容,如果未能解决你的问题,请参考以下文章

R用for循环保存图(保存直方图有效)

有啥方法可以在for循环中保存多个图而不用python覆盖?

如何在r中保存使用循环和mapplot包构建的多个图形?

r 用for循环和ggsave保存图

在 for 循环中以 pdf 格式保存 2-plot 图形

R中的并行计算,用于通过循环保存数据