2015-02-02 2 views
1

Я интегрируя функцию f(t) = 2t (просто пример), и хотел бы построить интеграл как функция времени t с помощьюggplot2: простой способ построения целого по независимой переменной?

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

Это то, что вы ищете? http://stackoverflow.com/a/12429538/1898580 –

+0

Дорогой Марат, большое спасибо за вашу помощь! К сожалению, это не то, что я хочу. По сути, я пытаюсь построить интеграл от функции, оцененной при каждом значении t, от 0 до 10. Таким образом, в приведенном выше примере начерченные точки будут (1,1), (2,4), (3 , 9), ..., (10, 100). Имеет ли это смысл? – Thomas

+2

Я думаю, что вы, вероятно, будете лучше оценивать вне 'ggplot2', а затем заговорить. –

ответ

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)) 
+0

Спасибо, mnel! это дает ошибку, однако «Ошибка: неожиданно»} «в»} «». Что мне здесь не хватает? благодаря! – Thomas

+0

@ Томас видит редактирование. – mnel

+0

отлично, спасибо столько же, что и ты, удар ножом! – Thomas

0

Не ggplot2, но не должен быть трудно адаптироваться, создавая dataframe помещаемого в paradgm:

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") 

Трюк с интегрирующей функцией является то, что она Retruns списка и вам нужно извлечь " value "для различных изменений верхнего предела.

Смежные вопросы