2011-01-29 73 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

相關問題