【问题标题】:Does ggplot use dynamic function for statistic functions?ggplot 是否将动态函数用于统计函数?
【发布时间】:2016-06-13 21:42:45
【问题描述】:

所以我正在运行一个优化问题,并试图将每个时间点的函数添加到绘图中。我能够绘制函数,但我存储了变量,并且似乎 r 在渲染它之前不会评估函数。这很难解释,但我有一个简单的例子来说明它。

data = data.frame(x = runif(20, -10, 10), y = runif(20, -10,10))
p <- ggplot(data, aes(x = x, y =y))
slope = 0.5
yoff = 1
p <- p + stat_function(fun = function(x) slope*x+yoff)
slope = 1
yoff = -1
p <- p + stat_function(fun = function(x) slope*x+yoff)
p

我想要的是图表上的两条线,其中包含我将函数添加到图表时的斜率和 y 轴截距。

【问题讨论】:

    标签: r function ggplot2 stat


    【解决方案1】:

    如果你有很多,列出函数:

    make_fun <- function(slope,yoff) {slope; yoff; function(x) x*slope + yoff}
    > l <- mapply(FUN = make_fun,slope = 1:2,yoff = 3:4)
    > l[[1]](1)
    [1] 4
    > l[[2]](1)
    [1] 6
    

    【讨论】:

      【解决方案2】:

      函数在使用时被评估,所以它在渲染时存在。 您可以重命名参数以具有不同的功能:

      p <- ggplot(data, aes(x = x, y =y))
      slope1 = 0.5
      yoff1 = 1
      p <- p + stat_function(fun = function(x) slope1*x+yoff1)
      slope2 = 1
      yoff2 = -1
      p <- p + stat_function(fun = function(x) slope2*x+yoff2)
      

      【讨论】:

        【解决方案3】:

        ggplot 中的许多参数在实际渲染绘图之前不会被评估。在这里,我们可以将 slopeyoff 值作为函数的参数,然后通过 args= 参数传入值,该参数确实在前面进行了评估。

        library(ggplot2)
        data = data.frame(x = runif(20, -10, 10), y = runif(20, -10,10))
        p <- ggplot(data, aes(x = x, y =y))
        slope = 0.5
        yoff = 1
        p <- p + stat_function(fun = function(x, slope, yoff) slope*x+yoff, args=list(slope=slope, yoff=yoff))
        slope = 1
        yoff = -1
        p <- p + stat_function(fun = function(x, slope, yoff) slope*x+yoff, args=list(slope=slope, yoff=yoff))
        p
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-06
          • 1970-01-01
          • 2016-09-30
          • 2015-07-30
          • 2011-07-11
          • 2019-07-22
          • 2011-10-23
          • 1970-01-01
          相关资源
          最近更新 更多