首页 > 解决方案 > 将几何传递给函数

问题描述

我对将几何图形组合起来很感兴趣,这样我就可以重用几何图形的组合。以下面的函数为例

draw_curve = function(from = -pi, to = pi, fun = sin, plotfun = geom_line, length.out = 100, ...) { 
  x = seq(from, to, (to-from)/length.out)
  y = fun(x)
  sindf = data.frame(x = x, y = y)
  ggplot(sindf, aes(x = x, y = y)) + 
    plotfun(...)
}

现在以下工作:

draw_curve(plotfun = geom_point)

甚至以下内容:

draw_curve(plotfun = function(...) geom_line(size = 3, color = 'red', ...))

但是,以下内容不会:

draw_curve(plotfun = function(...) geom_line(size = 3, color = 'red') + geom_point(shape=21))

我可以理解为什么它不起作用,因为 '+' 是一个重载运算符,显然希望左侧有一个绘图对象,右侧有一个 geom。plot+geom 的结果也是一个绘图,并且“+”是从左到右评估的,这就是为什么 ggplot 使用添加几何的语法的原因。

现在我的问题是什么是最简单的为什么要创建一个我可以轻松传递给函数的复合几何图形。

标签: rggplot2

解决方案


将geoms放在一个列表中:

linepoint <- function(...) list(geom_line(size = 3, color = 'red'), geom_point(shape=21))
draw_curve(plotfun = linepoint)

推荐阅读