Как добавить разные легенды в несколько сюжет? - PullRequest
2 голосов
/ 24 июня 2019

Хорошо, поэтому я использовал функцию par для объединения нескольких графиков. Я добавил легенды, и это все весело и игры, пока одни сюжеты не нуждаются в легендах, отличных от других, и я не могу понять, какую программистскую гимнастику нужно заставить ее работать.

Я включил часть, где у меня есть свои легенды, под названием «Это часть, где мне нужна помощь», как вы видите, их четыре, для N1, N2, K1 и K2, с аблайном и текстовые функции для каждого.

Я пытался составить списки конкатенаций и тому подобное, но это не сработало так же хорошо, как с моими альфами, и я потратил слишком много времени на изучение того, как заставить его работать.

##II - Species Competition : testing different parameter combinations with a loop

#Clearing workspace
rm(list=ls())
graphics.off()

#Parameters set on types (lambda 1, lambda 2, alphas...)

years <- 50
Lambda1set<-c(5,5,3,3.2)
Lambda2set<-c(4,4,5,2.5)
Alphaset<-list(matrix(c(0.01, 0.007, 0.0045, 0.01),ncol = 2, byrow = TRUE),
               matrix(c(0.01, 0.004, 0.009, 0.01),ncol = 2, byrow = TRUE),
               matrix(c(0.01, 0.0065, 0.003, 0.01),ncol = 2, byrow = TRUE),
               matrix(c(0.005, 0.005, 0.0045, 0.003),ncol = 2, byrow = TRUE))

#Creating vectors

TimeVec<-seq(1,years+1)
N1<-matrix(0,4,years+1)
N2<-matrix(0,4,years+1)

#INITIALIZATION
N0 <- 40
##N1[1] <-N0
##N2[1] <-N0
for(i in 1:4){
  N1[i,1] <-N0
  N2[i,1] <-N0
}

for (t in 1:years){
  for(i in 1:4){ 
    alphs <- Alphaset[[i]]

    N1[i,t+1]<-(Lambda1set[i]*N1[i,t])/(1+alphs[1,1]*N1[i,t]+alphs[1,2]*N2[i,t])
    N2[i,t+1]<-(Lambda2set[i]*N2[i,t])/(1+alphs[2,1]*N1[i,t]+alphs[2,2]*N2[i,t])
  }
}

## Plotting
titles<-c("Both species coexist","Species 1 wins","Species 2 wins",
          "Whoever comes first")
par(mfrow=c(2,2))

for(i in 1:4){

  plot(TimeVec,N1[i,],type="l",main = titles[i], xlab='Time (years)',
       ylab='Population Density',col='blue',lwd = 2,ylim = c(-100,500))
  lines(TimeVec,N2[i,],type="l",col='green', lwd = 2)
  legend("topright", legend = c("Species 1", "Species 2"),lty = 1, 
         col = c("blue", "green"),lwd = 2, bty = "n")

  #Adding equilibria

  R1<-(Lambda1set-1)
  R2<-(Lambda2set-1)
  alphs <- Alphaset[[i]]

  ### This is the part where I need help
  N1eq <- (R1[i]*alphs[2,2]-R2[i]*alphs[1,2])/
    (alphs[1,1]*alphs[2,2]-alphs[2,1]*alphs[1,2])
  abline(h = N1eq, lty = 3)
  text(0, N1eq, "n1*", adj = c(0, 0))

  N2eq <- (R2[i]*alphs[1,1]-R1[i]*alphs[2,1])/
    (alphs[1,1]*alphs[2,2]-alphs[2,1]*alphs[1,2])
  abline(h = N2eq, lty = 3)
  text(0, N2eq, "n2*", adj = c(0, 0))

  K1 <- R1[i]/alphs[1,1]
  K2 <- R2[i]/alphs[2,2]

  abline(h = K1, lty = 3)
  text(0, K1, "K1", adj = c(0, 0))
  abline(h = K2, lty = 3)
  text(0, K2, "K2", adj = c(0, 0))

  #Invasion scores
  Inv1<-((R1[i])/(R2[i]))*(alphs[2,2]/alphs[1,2])
  Inv2<-((R2[i])/(R1[i]))*(alphs[1,1]/alphs[2,1])
  print(c(Inv1,Inv2))

  #abline(h = 1/alphs[1, 1], lty = 3)
  #text(0, 1/alphs[1, 1], "K", adj = c(0, 0))

}

Plot Output

То, что я хотел бы получить, это N1 и N2 на первом графике, K1 на втором и четвертом и K2 на третьем. Спасибо всем за помощь!

Sam

1 Ответ

0 голосов
/ 26 июня 2019

Рассмотрим условное построение необходимого ablines в соответствии с итератором цикла i .Ниже приведены настройки в разделе справки

  ### This is the part where I need help
  if(i == 1) {
    N1eq <- (R1[i]*alphs[2,2]-R2[i]*alphs[1,2])/
      (alphs[1,1]*alphs[2,2]-alphs[2,1]*alphs[1,2])
    abline(h = N1eq, lty = 3)
    text(0, N1eq, "n1*", adj = c(0, 0))

    N2eq <- (R2[i]*alphs[1,1]-R1[i]*alphs[2,1])/
      (alphs[1,1]*alphs[2,2]-alphs[2,1]*alphs[1,2])
    abline(h = N2eq, lty = 3)
    text(0, N2eq, "n2*", adj = c(0, 0))
  }

  if (i %in% c(2,4)) {
    K1 <- R1[i]/alphs[1,1]
    abline(h = K1, lty = 3)
    text(0, K1, "K1", adj = c(0, 0))
  }

  if (i == 3) {
    K2 <- R2[i]/alphs[2,2]
    abline(h = K2, lty = 3)
    text(0, K2, "K2", adj = c(0, 0))
  }

Plot Output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...