在进行数据分析时,我们经常使用dplyr在特定的geom
中进一步修改数据帧。这允许我们稍后更改ggplot的默认数据框,并使一切仍然有效。
template <- ggplot(db, aes(x=time, y=value)) +
geom_line(data=function(db){db %>% filter(event=="Bla")}) +
geom_ribbon(aes(ymin=low, ymax=up))
ggsave( template, "global.png" )
for(i in unique(db$simulation))
ggsave( template %+% subset(db, simulation==i), paste0(i, ".png")
是否有更好/更短的方式来指定filter
命令,例如使用一些神奇的.
?
修改的
澄清一些注释:通过使用geom_line(data = db %>% filter(event=="Bla"))
,当我稍后使用%+%
更改默认数据框时,不会更新图层。我的目标是使用geom_ *的data
参数作为函数。
答案 0 :(得分:2)
在更好地阅读%>%
的文档后,我找到了解决方案:
使用点占位符作为lhs 当点用作lhs时,结果将是一个功能序列,即将整个右侧链依次应用于其输入的函数。参见示例。
因此,制定上述例子的最好方法,也包括上面的建议:
db <- diamonds
template <- ggplot(db, aes(x=carat, y=price, color=cut)) +
geom_point() +
geom_smooth(data=. %>% filter(color=="J")) +
labs(caption="Smooths only for J color")
ggsave( template, "global.png" )
db %>% group_by(cut) %>% do(
ggsave( paste0(.$cut[1], ".png"), plot=template %+% .)
)