能够指定应该返回ggplot对象的ggplot美学功能

时间:2015-02-20 12:00:24

标签: r function ggplot2 aesthetics

我试图构建一个行为类似于ggplot函数的函数,并且还返回一个ggplot对象,其他函数可以进一步工作(添加构面,应用主题等)。

我现在面临的障碍是,我无法让论证传递给函数,就像我期望的那样。

data(iris)
te <- function(data,x,y){

  g <- ggplot(data,aes_q(x=quote(x),y=quote(y))) + scale_x_continuous() + 
  scale_y_continuous() + geom_point()
  return(g)

}
te(iris,x=Species,y=Petal.Length)

我得到的是:

Error: geom_point requires the following missing aesthetics: x, y

我希望这能让我把参数传递给不是字符串,但显然我在这里做错了。对我来说奇怪的是,geom_point是抱怨的功能。怎么样?

2 个答案:

答案 0 :(得分:2)

调用函数时尝试quote

data(iris)
library(ggplot2)
te <- function(data,x,y){
  g <- ggplot(data,aes_q(x,y)) + scale_x_continuous() + 
    scale_y_continuous() + geom_point()
  return(g)

}
te(iris,x=quote(Species),y=quote(Petal.Length))

答案 1 :(得分:2)

在功能内部,您需要使用substitute代替quote

data(iris)
te <- function(data,x,y){

  x <- substitute(x)
  y <- substitute(y)
  g <- ggplot(data,aes_q(x=x,y=y)) + scale_x_discrete() + 
    scale_y_continuous() + geom_point()
  return(g)

}
te(iris,x=Species,y=Petal.Length)

这将是完美的。

P.S。我将scale_x_continuous更改为scale_x_discrete,因为Species是离散的

enter image description here