我试图将多个图形元素添加到现有的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也是可行的。但是实际上,我要向绘图中添加几个不同的几何图形,因此我认为我需要在函数中一起添加多个图层。
答案 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