Используя простую логистическую модель роста, я хочу построить график на основе контура / градиента, показывающий, как параметр роста (r) изменяет наклон и асимптоты кривой.
Я хочу интерполировать кривые, а не просто показывать набор линий.
Итак, я попробовал следующее:
#Using these packages
library(ggplot2)
library(tidyr)
# The logistic function applied to a vector of time steps (t)
# K is carrying capacity - asymptote
# N0 is initial population density
# r is growth rate - slope
LogGr <- function(r,K,N0,t){
d <- vapply(t,function(t) K/(1+(K/N0-1)*exp(-r*t)),numeric(1))
}
# time steps - daily over 4 years
t<-1:(365*4)
# r values - lots of them
r <- as.list(seq(0,0.1,0.001))
# using lapply to run each growth parameter - faster than for loop
ld <- lapply(r,LogGr,K=1,N0=0.00001,t=t)
# create data frame - col of population densities (N) for each r value
df <- data.frame(matrix(unlist(ld), nrow=length(t), byrow=F))
# Add time column (days)
df$Days <- t
# Rename cols for ease of viewing
colnames(df) <- c(as.character(as.vector(r)),"Days")
# Transform to long data format - facilitate ggplot colouring
Data <- gather(df,key=Gr,value=N,-Days)
# GGplot geom_raster plot
# My problem lies here somewhere - I may be misunderstanding the interpolate param.
ggplot(Data,aes(x=Days,y=round(N,3)))+
geom_raster(aes(fill=as.numeric(Gr)),interpolate=T)+
labs(y="Population Density",col="Growth Rate")
Я хочу, чтобы цвет интерполировался между кривыми.
EDIT:
После увеличения количества r
значений в данном диапазоне до seq(0,0.1,0.00001)
я смог создать растр с интерполяцией, используя приведенный выше код.
Итак, этот вопрос звучит так: «Как вы контролируете, как далеко будет распространяться интерполяция в geom_raster? Но это может быть повторным вопросом сейчас. Обновление скоро будет.