ggplot2:在自变量上绘制积分的简单方法?
ggplot2: easy way to plot integral over independent variable?
我正在对一个函数 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 中有没有一种简单的方法可以做到这一点(例如,类似于函数的绘制方式)?我知道我可以 "manually" 评估和绘制每个 t
的数据,但我想我会看看是否有人可以推荐更简单的方法。
不是 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")
integrate 函数的诀窍在于它会重新运行一个列表,您需要提取 'value' 元素以应对上限的各种变化。
这是一个 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))
我正在对一个函数 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 中有没有一种简单的方法可以做到这一点(例如,类似于函数的绘制方式)?我知道我可以 "manually" 评估和绘制每个 t
的数据,但我想我会看看是否有人可以推荐更简单的方法。
不是 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")
integrate 函数的诀窍在于它会重新运行一个列表,您需要提取 'value' 元素以应对上限的各种变化。
这是一个 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))