首页 > 解决方案 > ggSave group_by df ggarrange'd ggplot 对象的列表

问题描述

我已经使用group_bydoggplot- 两次 - 创建了两个简单dfs的 Date (组)和ggplot输出列表,非常感谢本网站上示例的帮助。简化示例:

p1 <- df_i %>% group_by(Date) %>% do(
plots = ggplot(data = .) +
geom_line() #etc, hugely long and detailed ggplot call omitted for brevity, but it works fine
) # close do

然后我可以加入那些dfs

p1 <- cbind(p1, p2[,2])
names(p1) <- c("Date", "Temp", "Light") #Temp & Light were both "plots" from above

并遍历行,将输出保存在 1 行(顶部和底部对象)中ggarranged png

for (j in 1:nrow(p1)) { 
      ggsave(file = paste0(p1$Date[j], ".png"),
             plot = arrangeGrob(p1$Temp[[j]], p1$Light[[j]]),
             device="png",scale=1.75,width=6.32,height=4,units="in",dpi=300,limitsize=TRUE)
}

到目前为止,一切都很好。但是自然厌恶 a for-loop,所以我试图ggsaving在 a中做group_by,使用相同的参数选项,考虑到索引与(我理解的)子集ggsave的差异,只改变需要的东西:for-loopgroup_by

p1 %>% group_by(Date) %>%
      ggsave(file = paste0(.$Date, ".png"),
             plot = arrangeGrob(Temp, Light),...) #other params hidden here for brevity

grDevices::png(..., res = dpi, units = "in") 中的错误:'pointsize' 参数无效

如果我添加pointsize=10它说“无效的 bg 值”;添加bg = "white"

check.options(new, name.opt = ".X11.Options", envir = .X11env) 中的错误:'grDevices::png(..., res = dpi, units = "in")' 中的参数无效(需要命名参数)

(我也试过降低dpi没有效果)。可能我正在以错误的方式解决这个问题,例如%>%%$%弗拉德的建议中交换magrittr

Error in gList(list(list(data = list(DateTimeUTCmin5 = c(915213660, 915213780,  : 
  only 'grobs' allowed in "gList"

这在调用中Date和调用中给出了相同的错误。尝试重新创建框架:.$Dateggsavedo

 p1 %>% group_by(Date) %>%
      do(ggsave(file = paste0(.$Date, ".png"),"_", .$Date, ".png"),
             plot = arrangeGrob(Temp, Light), #etc

安排Grob(Temp,Light)中的错误:找不到对象'Temp'

p1 %>% group_by(Date) %>%
      do(ggsave(file = paste0(.$Date, ".png"),"_", .$Date, ".png"),
             plot = arrangeGrob(.$Temp, .$Light), #etc

gList(list(list(data = list(DateTimeUTCmin5 = c(915213660, 915213780, : "gList" 中只允许 'grobs') 中的错误

如果我使用%$%.

有没有人对这些工具有相关的理解,以便他们可以看到我在这里做错了什么?看起来我应该接近,但我越来越多地在黑暗中摸索。任何指针都非常感谢。提前致谢!

同样,如果人们推荐一种不同的方法,我也很感兴趣。让我感到震惊的是,我可以使用lapply(or parSapply) 而不是for-loop. p1 df运营是否grouped dfs优于apply运营?

[编辑:所需的最终输出:ggsave 将每个日期的 1 个图像(上面有 2 个图)转储到指定的文件夹中。本质上,如果我可以让 ggsave 在 grouped_df 中工作,那应该是]

标签: rggplot2dplyrpipemagrittr

解决方案


推荐阅读