导出和保存名称基于列的 ggplots 对象列表

exporting and saving a list of ggplots objects with names based on a column

提问人:TheBoomerang 提问时间:6/18/2022 最后编辑:PhilTheBoomerang 更新时间:6/18/2022 访问量:67

问:

成为 R 用户已经有一年了 - 所以还有很多东西要学。无论如何,我的问题是:

  • 如何导出列表中的 ggplot 并根据它们的位置专门命名它们。

以下是我使用我所在位置创建的虚拟数据。

location <- c('obs1', 'obs2', 'obs3', 'obs4', 'obs5', 'obs6')
percentage <- c(40, 30, 20, 40, 20, 30)
mean_percentage <- c(30, 30, 30, 30, 30, 30)

dat1 <- data.frame(location, percentage, mean_percentage)

plot.func <- function(dat) {
  
  dat %>% 
    pivot_longer(cols = 2:3, names_to = 'place', values_to = 'percent') %>%
    ggplot(aes(x = place, y = percent, fill = place)) +
    geom_bar(stat = 'identity')
  
}

myplots <- list()

myplots <- lapply(1:nrow(dat1), function(i) plot.func(dat1[i,]))

上面的代码生成了名为“myplots”的列表,其中包含 6 个 ggplot。

我想使用基于位置变量的名称单独导出这些内容。

例如:obs1.barchart.pdf、obs2.barchart.pdf、obs3.barchart.pdf等。

我尝试了各种不同的方法,但都在兜圈子。任何帮助非常感谢。

最好 回旋镖

R 循环 ggplot2 lapply

评论


答:

1赞 stefan 6/18/2022 #1

一种选择是命名您的绘图列表并使用或循环遍历绘图列表以保存它们。purrr::imappurrr::iwalk

为方便起见,我使用 split 首先拆分您的数据,通过该数据,它将创建一个命名的数据帧列表,在将函数传递给之前,我使用该列表来保存绘图:locationlapplyiwalkggsave

library(ggplot2)
library(dplyr)
library(tidyr)

split(dat1, dat1$location) |> 
  lapply(plot.func) |> 
  purrr::iwalk(~ ggsave(paste(.y, "barchart", "pdf", sep = "."), plot = .x))
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image

评论

0赞 TheBoomerang 6/18/2022
我喜欢这样 - 绝对是一种享受