Один из способов - преобразовать deSolve
объект out
в фрейм данных , который затем можно построить с помощью ggplot2 , а затем ggplotly
(графическая оболочка):
out <- ode(N0, t, fn, r)
out_df <- as.data.frame(ode(N0, t, fn, r))
colnames(out_df)[2] <- "Y" #changing the column name which was `1`.
#making the ggplot object `ggp` and then using `ggplotly` to make it interactive.
library(ggplot2); library(plotly) ;
ggp <- ggplot(out_df, aes(x = time, y = Y)) + geom_line();
ggplotly(ggp); #check in the `viewer` tab of RStudio, not in the `Plots` tab.
Это то, что вы хотите?
РЕДАКТИРОВАТЬ , чтобы добавить данные линии, добавьте еще один слой geom_line с ggp
, прежде чем перейти к ggplotly
:
ggp + geom_line(aes(N0*exp(r*t)), linetype = "dashed", color = "red") + xlim(c(0, 5))
EDIT2 для ответа на вопрос OP:
Вы можете узнать больше о списке или фрейме данных в r , в этом видео . Чтобы проверить, есть ли у вас список, используйте это:
is.list(fn(t, N, r))
[1] TRUE
Затем [[1]]
возвращает первый element
(который может быть другим списком: P)
fn(t, N, r)[[1]]
[1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[20] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
[39] 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
[58] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
[77] 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
[96] 95 96 97 98 99 100
И, наконец, датафрейм является расширенной формой списка .