我正在整合一个函数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
的数据,但我想我会看看是否有人可以推荐一种更简单的方法。
答案 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;值元素。