2011-01-29 74 views
23

如果我尝试手动撰写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元素吗?

+2

我认为`+`操作符需要其中一个参数是`ggplot`类才能正常工作。 geoms不是`ggplot`对象,而是`p`图。 – Sharpie 2011-01-30 07:03:21

回答

45

GGPLOT2支持元素的“名单”:

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

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

你可以在列表中保留该GGPLOT2函数返回,其中包括实验室(任何一块),选择采用()等,然后用“+”用于绑定ggplot2基础层和列表中的部分。

大概这个功能还没有广为人知,但是当任何人想要重新使用一块元素时,它是非常有用的。

+1

另请参阅Hadley的精彩教程(2015年中),内容如下:https://rpubs.com/hadley/97970 – 2016-05-04 12:00:13

相关问题