Есть ли способ добавить значение на ось, где кривая графика достигает его? - PullRequest
0 голосов
/ 19 июня 2019

Хорошо, я получил немного кода для построения графика динамики населения, и мне бы хотелось, чтобы на каждом «конце» кривой, по осям x и y, было записано определенное значение, как показано здесь: https://images.ecosia.org/EIQKP81uukSNIVwegG9q5w1xhmM=/0x390/smart/https%3A%2F%2Fwww.webpages.uidaho.edu%2Fwlf448%2Fimages%2Fstableb.gif

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

### Outcome study with isoclines

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

#plot setup
#par(mfrow=c(2,2))

#Parameters
lambda1<- 3.2
lambda2<- 3
alphs <- matrix(c(0.005, 0.005, 0.0045, 0.004), ncol = 2, byrow = TRUE)

#Plotting isoclines
plot(0,0,type="l",xlab='N1',ylab='N2',col='blue',xlim =c(0,470),
     ylim = c(0,750))
abline(a=((lambda1-1)/alphs[1,2]),b=(- alphs[1,1]/alphs[1,2]),col='blue')
abline(a=((lambda2-1)/alphs[2,2]),b=(- alphs[2,1]/alphs[2,2]),col='green')

legend("topright", legend = c("Species 1", "Species 2"),lty = 1, 
       col = c("blue", "green"), bty = "n")

arrows(x0 = 300, y0 = 600, x1 = 270, y1 = 600, length = 0.06,col="blue")
arrows(x0 = 300, y0 = 600, x1 = 300, y1 = 510, length = 0.06, col="green")
arrows(x0 = 50, y0 = 100, x1 = 80, y1 = 100, length = 0.06,col="blue")
arrows(x0 = 50, y0 = 100, x1 = 50, y1 = 190, length = 0.06, col="green")

Я не знаю, чего ожидать честно, но должен быть способ сделать это, верно?

1 Ответ

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

Пока вы можете вычислить место, куда вы хотите добавить текст, вы можете использовать функцию axis(), чтобы добавить его.Например, чтобы поместить значения на ось y, вы хотите, чтобы они были в месте, где x равен par("usr")[1].Этот код делает это:

x <- par("usr")[1]
a <- c(((lambda1-1)/alphs[1,2]), ((lambda2-1)/alphs[2,2]))
b <- c((- alphs[1,1]/alphs[1,2]), (- alphs[2,1]/alphs[2,2]))
y <- a + b*x
axis(2, at = y, labels = expression(K[2], K[1]/a[2,1]), tick = FALSE, line = -1)

Я думаю, что ярлыки не совсем правильные, поскольку x отрицательный, а не ноль;Вы можете добавить xaxs = "i" к своему сюжетному вызову, чтобы избежать этого.Вы можете переместить их в график или из него, изменив значение line в вызове axis().С изменением plot и кодом выше я получаю это:

screenshot

...