我能够根据数据帧列表生成一些图:
df1 <- mtcars
df2 <- mtcars
combined_mtcars <- list(first_df = df1, second_df = df2)
# make the plots
imap(.x = combined_mtcars, ~ggplot(.x, aes(x = hp, y = mpg, group = cyl)) +
geom_line() +
ggtitle(.y))
然后我想将每个图保存到名为/ plots的目录中。所以我尝试像这样添加ggsave:
imap(.x = combined_mtcars, ~ggplot(.x, aes(x = hp, y = mpg, group = cyl)) +
geom_line() +
ggtitle(.y)) %>%
imap(~ggsave(plot = .y, file = paste0("/plots/", .y, ".png")))
这导致错误“在图像中保存6.62 x 5.57 UseMethod(“ grid.draw”)中的错误: 没有适用于“ grid.draw”的适用方法应用于“字符”类的对象。
在文件名与标题.y相同的情况下,如何保存每次迭代?
答案 0 :(得分:2)
我们需要确保将ggplot对象作为第一个参数传递,使用tag
函数中的labs()
参数允许我们将图分配给“变量”。
imap(.x = combined_mtcars, ~ggplot(.x, aes(x = hp, y = mpg, group = cyl)) +
geom_line() +
labs(title = .y, tag="Plot")%>%
imap(~ggsave(plot = Plot, file = paste0("/plots/", .y, ".png")))
如果这不起作用,请尝试执行此操作,因为ggsave可能默认为正确的绘图。
imap(.x = combined_mtcars, ~ggplot(.x, aes(x = hp, y = mpg, group = cyl)) +
geom_line() +
ggtitle(.y)) %>%
imap(~ggsave(file = paste0("/plots/", .y, ".png")))