将环境中的图列表保存在R中

vsmadaxz  于 2023-02-20  发布在  其他
关注(0)|答案(4)|浏览(113)

我想用ggsave()保存R环境中的所有绘图。如何保存R环境中的绘图列表,然后将该列表用作ggsave()的输入?
我从here中得到一些cars的图来说明:

PlotA <- ggplot(mtcars, aes(x=hp, y=mpg, color=cyl, shape=cyl)) +
  geom_point(size=3)

PlotB <- ggplot(mtcars, aes(x=hp, y=mpg, color=cyl, shape=cyl)) +
  geom_point(size=3) +
  geom_smooth(method="lm", aes(fill=cyl)) 

PlotC <- ggplot(mtcars, aes(x=hp, y=mpg)) +
  geom_point(size=3, aes(color=cyl, shape=cyl)) +
  geom_smooth(method="loess", color="black", se=FALSE) +
  geom_smooth(method="lm", aes(color=cyl, fill=cyl))
  • 我的尝试:
saveplots <- list()
saveplots <- ls(pattern = 'Plot')

### Save pngs ###

for(i in 1:length(saveplots)){
  ggsave(saveplots[[i]],
         file=paste0("Total", saveplots,".png"),
         width = 22, height = 11.5, units = "cm",
         path = "plots/")
}
  • 有些帖子帮了点忙,但还不完全是(ex1ex2)。有什么想法吗?
3htmauhk

3htmauhk1#

您可以使用函数get从环境中获取对象。

for(i in 1:length(saveplots)){
  ggsave(plot = get(saveplots[[i]]),
         filename=paste0("Total", saveplots[[i]],".png"),
         width = 22, height = 11.5, units = "cm",
         path = "plots/")
}
kzipqqlq

kzipqqlq2#

使用mget

library(purrr)
library(dplyr)
library(stringr)
mget(savePlots) %>%
    iwalk(~ ggsave(str_c("Total", .y, ".png"), 
               .x, width = 22, height = 11.5, units = "cm", path = "plots/"))
ff29svar

ff29svar3#

lapplylsget结合使用的另一种类似方法:

plots_list <- lapply(ls(pattern="Plot"), get)

lapply(seq_along(plots_list), function(i) {
  ggsave(paste0("Total", i, ".png"), plots_list[[i]], width=22, height=11.5, units="cm", path = "plots/")
})
jhiyze9q

jhiyze9q4#

如果你不知道/不记得/不关心你所有的ggplot的名字是什么,试试saveplots <- lsclass('ggplot'),它可以在我的包(在CRAN)“cgwtools”中找到;此处提供来源:

lsclass <- function (type = "numeric") 
{
    inlist <- ls(.GlobalEnv)
    classlist <- sapply(1:length(inlist), function(j) class(get(inlist[j])))
    tnams <- sapply(1:length(inlist), function(j) type %in% classlist[[j]])
    return(inlist[tnams])
}

相关问题