提问人:TheBoomerang 提问时间:6/18/2022 最后编辑:PhilTheBoomerang 更新时间:6/18/2022 访问量:67
导出和保存名称基于列的 ggplots 对象列表
exporting and saving a list of ggplots objects with names based on a column
问:
成为 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等。
我尝试了各种不同的方法,但都在兜圈子。任何帮助非常感谢。
最好 回旋镖
答:
1赞
stefan
6/18/2022
#1
一种选择是命名您的绘图列表并使用或循环遍历绘图列表以保存它们。purrr::imap
purrr::iwalk
为方便起见,我使用 split 首先拆分您的数据,通过该数据,它将创建一个命名的数据帧列表,在将函数传递给之前,我使用该列表来保存绘图:location
lapply
iwalk
ggsave
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
我喜欢这样 - 绝对是一种享受
上一个:将多列转换为宽格式
评论