如何解决使用循环在图形上绘制两条或多条线
我正在尝试使用循环在同一张图上绘制两条或更多条线。我的图是一个种群动态图,我想重复更改起始种群的值,但保持所有其他参数不变。我想在一张图上绘制不同的结果。有人可以帮忙吗?
解决方法
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()
,
这就是我要做的。
首先,由于lp
和sp
的计算是相同的,因此只有初始值会发生变化,因此请创建一个函数来执行此操作。
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")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。