使用循环在图形上绘制两条或多条线

问题描述

我正在尝试使用循环在同一张图上绘制两条或更多条线。我的图是一个种群动态图,我想重复更改起始种群的值,但保持所有其他参数不变。我想在一张图上绘制不同的结果。有人可以帮忙吗?

解决方法

enter image description here尝试以下操作:

library(ggplot2)
MAX.Y<-30
# year<-0:30
year<-1:30
rlp<-0.1
lp<-rep(0,MAX.Y)
lp[1]<-4000
K<-4000000
for(n in 1: (MAX.Y-1)) {lp[n+1]<-lp[n]+(rlp)*(1-lp[n]/K)*lp[n]}
# plot(lp~year,xlab="Time (years)",ylab="Population size",main=c(paste("B)   Anchovy population growth"),paste ("in less productive environment")),col="darkorchid",type="l",cex.main=1.0)
sp<-rep(0,MAX.Y)
sp[1]<-100000
for(n in 1: (MAX.Y-1)) {sp[n+1]<-sp[n]+(rlp)*(1-sp[n]/K)*sp[n]}
# lines(sp~year,col="black")

data = data.frame(year=year,lp=lp,sp=sp)
data = reshape2::melt(data,id.vars = 'year')
ggplot(data,aes(year,value,colour = variable))+
  geom_line()+
  labs(x = "Time (years)",y = "Population size",title = "B)   Anchovy population growth \n in less productive environment")+
  theme_minimal()

,

这就是我要做的。
首先,由于lpsp的计算是相同的,因此只有初始值会发生变化,因此请创建一个函数来执行此操作。

f <- function(initial,MAX,rlp,K){
  x <- numeric(MAX)
  x[1] <- initial
  for(i in seq_len(MAX - 1)) {
    x[i + 1] <- x[i] + rlp*(1 - x[i]/K)*x[i]
  }
  x
}

现在将sapply函数设为初始值的向量。

MAX.Y <- 30
rlp <- 0.1
year <- seq_len(MAX.Y)
K <- 4000000

InitialValues <- setNames(c(4000,100000),c("lp","sp"))
x <- sapply(InitialValues,f,MAX.Y,K)

并用matlines进行绘制。但是要使matlines工作,必须使用自定义标题,轴限制等来创建图。

plot(1,type = "n",xlim = range(year),ylim = range(x),main = c(paste("B)   Anchovy population growth"),xlab = "Time (years)",ylab = "Population size",cex.main = 1.0,col = c("darkorchid","black"))
matlines(x,lty = "solid")

enter image description here