使用功能将多层添加到ggplot

时间:2019-07-11 13:09:56

标签: r function ggplot2

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

Response.Clear();
Response.Buffer = true;
Response.Charset = "UTF-8";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

//simplified - actually sending a variable with filename
Response.AddHeader("Content-Disposition", "attachment;filename=דיזינגוף.xlsx");

using (MemoryStream MyMemoryStream = new MemoryStream())
{
  wb.SaveAs(MyMemoryStream);
  MyMemoryStream.WriteTo(Response.OutputStream);
  Response.Flush();
  Response.End();
}

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

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

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

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

我明白了

  

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

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

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

1 个答案:

答案 0 :(得分:5)

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