动态保存图列表

时间:2019-01-14 21:10:56

标签: r ggplot2

我能够根据数据帧列表生成一些图:

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相同的情况下,如何保存每次迭代?

1 个答案:

答案 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")))