ggplot2:在自变量上绘制积分的简便方法?

时间:2015-02-02 23:26:46

标签: r ggplot2

我正在整合一个函数f(t) = 2t(只是一个例子),并希望使用

将积分绘制为时间t的函数
awesome_thing <- function(t) {2*t}
integrate(awesome_thing, lower=0, upper=10)

但是,我想在ggplot2中绘制积分作为时间的函数,因此对于这个例子,绘制的点将是(1,1),(2,4),(3,9),... ,(10,100)。

有没有一种简单的方法可以在ggplot中执行此操作(例如,类似于绘制函数的方式)?我知道我可以“手动”评估和绘制每个t的数据,但我想我会看看是否有人可以推荐一种更简单的方法。

2 个答案:

答案 0 :(得分:2)

以下是ggplot解决方案和stat_function

 # create a function that is vectorized over the "upper" limit of your
 # integral
int_f <- Vectorize(function(f = awesome_thing, lower=0,upper,...){
    integrate(f,lower,upper,...)[['value']] },'upper')


ggplot(data.frame(x = c(0,10)),aes(x=x)) + 
   stat_function(fun = int_f, args = list(f = awesome_thing, lower=0))

答案 1 :(得分:0)

不是ggplot2,但不应该通过创建数据框来传递给该范例来进行调整:

 plot(x=seq(0.1,10, by=0.1), 
      y= sapply(seq(0.1,10, by=0.1) ,  
            function(x) integrate(awesome_thing, lower=0, upper=x)$value ) , 
         type="l")

使用集成功能的技巧是它重新生成一个列表,你需要为上限中的各种变化提取&#39;值元素。