1

当我使用 将表格和图形集成到文档中knitr时,添加代码使其更具可重复性和趣味性。

通常dplyr和的组合ggvis可以制作具有相对清晰代码的图(使用magrittr管道运算符%>)。

mtcars %>%
  group_by(cyl, am) %>%
  summarise( weight = mean(wt) ) %>%
  ggvis(x=~am, y=~weight, fill=~cyl) %>%
  layer_bars()

问题是 ggvis 图:

ggvis

看起来不像 ggplot2 图那么漂亮(我知道,因式分解cyl):

在此处输入图像描述

但是,因为ggplot2我们需要:

mtcars %>%
  group_by(am, cyl) %>%
  summarise( weight = mean(wt) ) %>%
  ggplot( aes(x=am, y=weight, fill=cyl) ) +
  geom_bar(stat='identity')

我的问题是这从管道切换%>%+管道。我知道这是一个非常轻微的痒,但我更喜欢使用:

mtcars %>%
  group_by(am, cyl) %>%
  summarise( weight = mean(wt) ) %>%
  ggplot( aes(x=am, y=weight, fill=cyl) ) %>%
  geom_bar(stat='identity')

有没有办法修改的行为,ggplot2以便这会起作用?

附言。我不喜欢使用magrittr's的想法,add()因为这再次使代码更难以阅读。

4

1 回答 1

1

由于在评论中扩展太长,并且根据您的回答,我不确定您是否尝试过我提供的代码但它没有工作,或者您之前尝试过但没有管理

geom_barw<-function(DF,x,y,fill,stat){
   require(ggplot2)
   p<-ggplot(DF,aes_string(x=x,y=y,fill=fill)) + geom_bar(stat=stat)
   return(p)
}
library(magrittr)
library(dplyr)
library(ggplot2)

mtcars %>%
group_by(cyl, am) %>%
summarise( weight = mean(wt) ) %>%
geom_barw(x='am', y='weight', fill='cyl', stat='identity')

这适用于我:dplyr_0.4.2 ggplot2_2.1.0 magrittr_1.5

当然geom_barw可以修改,这样你就不需要再使用引号了。

编辑:应该有更优雅和更安全lazy的方式(参见lazyeval包),但一个非常快速的适应将是使用substitute(如Axeman所指出的 - 但没有deparse部分):

 geom_barw<-function(DF,x,y,fill,stat){
    require(ggplot2)

    x<-substitute(x)
    y<-substitute(y)
    fill<-substitute(fill)

    p<- ggplot(DF,aes_string(x=x,y=y,fill=fill))
    p<- p + geom_bar(stat=stat)
    return(p)
}
于 2016-04-01T10:40:24.050 回答