使用功能将多层添加到ggplot

Mar*_*kum 1 r function ggplot2

我试图将多个图形元素添加到现有的ggplot中。新元素将放置在指定的x值周围。简化后,我有一个原点为1的现有图p:

library(ggplot2)
p <- ggplot(data = data.frame(x = 0, y = 0), aes(x = x, y = y)) +
  geom_point()
Run Code Online (Sandbox Code Playgroud)

现在,我想创建一个可以基于定义的x位置向左和向右添加点的函数。我试过了:

add_points <- function(x) {
  geom_point(aes(x = x - 1, y = 0), color = "red") +
  geom_point(aes(x = x + 1, y = 0), color = "red")
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用添加它们时

p + add_points(x = 0)
Run Code Online (Sandbox Code Playgroud)

我懂了

错误:无法将ggproto对象一起添加。您是否忘了将此对象添加到ggplot对象?

基于带有参数的函数添加多层的ggplot方法是什么?

PS:仅使用此功能添加一层可行的,因此首先创建带有x值的小标题并将其馈送到geom_point也是可行的。但是实际上,我要向绘图中添加几个不同的几何图形,因此我认为我需要在函数中一起添加多个图层。

Rol*_*and 6

来自help("+.gg")

您还可以提供一个列表,在这种情况下,列表的每个元素都会依次添加。

add_points <- function(x) {
  list(geom_point(aes(x = x - 1, y = 0), color = "red"),
    geom_point(aes(x = x + 1, y = 0), color = "red"))
}

p + add_points(x = 0)
#works
Run Code Online (Sandbox Code Playgroud)