Как я могу объединить несколько элементов ggplot2 в возвращении функции? - PullRequest
25 голосов
/ 29 января 2011

Если я попытаюсь вручную составить некоторые элементы графика 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 Ответ

48 голосов
/ 29 января 2011

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 и фрагмента в списке.

Возможно, эта функция широко не известна, но она очень полезна, когда кто-то хочет повторно использовать элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...