使用一个函数在ggplot中添加多个图层

9

我正在尝试向现有的ggplot添加多个图形元素。新元素将放置在指定的x值周围。简化来说,我有一个现有的绘图p,在原点上有一个点:

library(ggplot2)
p <- ggplot(data = data.frame(x = 0, y = 0), aes(x = x, y = y)) +
  geom_point()

现在我想创建一个函数,可以在定义的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")
}

但是当我尝试使用以下方法添加它们时:

p + add_points(x = 0)

我得到了以下错误信息:

错误:无法将ggproto对象相加。您是否忘记将此对象添加到ggplot对象中?

在ggplot中,如何基于一个参数添加多个图层?

注:使用该函数只添加一个图层是可以正常工作的,因此首先创建一个包含x值的tibble,并将其提供给geom_point也可以正常工作。但实际上,我需要向绘图中添加几个不同的geoms,所以我认为需要在函数中添加几个图层。


1
这可能与评估顺序有关。它将尝试在将geom_point添加到绘图之前将其添加到geom_point中。我可以建议重新构造函数以接收p和x作为参数,并将函数的结果返回给p。 - Chris Littler
根据您想要实现的复杂程度,您可能需要创建自己的geom。请阅读此链接:https://cran.r-project.org/web/packages/ggplot2/vignettes/extending-ggplot2.html。 - January
1个回答

18

来自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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接