Ggplot子集数据函数和dplyr

时间:2018-04-10 12:08:19

标签: r ggplot2 dplyr

在进行数据分析时,我们经常使用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参数作为函数。

1 个答案:

答案 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 %+% .)
)