如何将多个ggplot2元素组合到函数的返回中?

时间:2011-01-29 05:26:35

标签: r ggplot2

如果我尝试手动编写ggplot2图的某些元素,它可以正常工作:

> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + geom_vline(xintercept = 20) + geom_point(data = mtcars)

但是如果我尝试将一些组合捆绑到一个函数中,我会收到一个错误:

> myFunction <- function() {
+   return(
+     geom_vline(xintercept = 20) + geom_point(data = mtcars)
+   )
+ }
> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + myFunction()
Error in geom_vline(xintercept = 20) + geom_point(data = mtcars) : 
  non-numeric argument to binary operator

我是否遗漏了ggplot2符号中的某些内容,以便在函数体中正确组合ggplot2个元素?

1 个答案:

答案 0 :(得分:48)

ggplot2支持元素的“列表”:

myFunction <- function()
 list(geom_vline(xintercept = 20),
      geom_point(data = mtcars))

p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
p + myFunction()

你可以在列表中保留ggplot2函数返回的任何部分,包括labs(),opts()等,然后使用“+”表示绑定ggplot2基础层和列表中的部分。

这个功能可能并不广为人知,但是当有人想要重复使用某个元素时,这个功能非常有用。