Легенда разочаровывает при построении графика в R



Я построил пять графиков и легенду. Графики работают просто отлично, однако legens исчезает без ошибки.
мой предварительный просмотр в RStudio выглядит так



Когда я увеличиваю масштаб, область, где должна быть легенда, пуста.
Я использую следующий код:



opar <- par (no.readonly = TRUE)
par (mfrow = c(3, 2))

library(deSolve)

# Plot A
LotVmod <- function (Time, State, Pars) {
with(as.list(c(State, Pars)), {
dx = (b*x) - (b*x*x/K) - (y*(x^k/(x^k+C^k)*(l*x/(1+l*h*x))))
dy = (y*e*(x^k/(x^k+C^k)*(l*x/(1+l*h*x)))) - (m*y)
return(list(c(dx, dy)))
})
}

Pars <- c(b = 1.080, e = 2.200, K = 130.000, k = 20.000, l = 2.000,
h = 0.030, C = 2.900, m = 0.050)

State <- c(x = 0.25, y = 2.75)
Time <- seq(1, 9, by = 1)

out <- as.data.frame(ode(func = LotVmod, y = State, parms = Pars, times = Time))

matplot(out[,-1], type = "l", xlim = c(1, 9), ylim = c(0, 45),
xlab = "time",
ylab = "population",
main = "Compartment A")
mtext ( "Coefficient of Variance 4.96", cex = 0.8 )

x <- c(# Validation data)
y <- c(# Validation data)

lines (Time, x, type="l", lty=1, lwd=2.5, col="black")
lines (Time, y, type="l", lty=1, lwd=2.5, col="red")

# Legend
plot.new()
legend("center", c(expression (italic ("F. occidentalis")*" observed"),
expression (italic ("M. pygmaeus")*" observed"),
expression (italic ("F. occidentalis")*" simulated"),
expression (italic ("M. pygmaeus")*" simulated")),
lty = c(1, 1, 1, 2),
col = c(1, 2, 1, 2),
lwd = c(2.5, 2.5, 1, 1),
box.lwd = 0, bty = "n")

# Plot C to F = same as A

par(opar)


Мои выходные данные не дают ошибки. Я использовал тот же самый код раньше без каких-либо проблем, таким образом, я перезапустил R, удалил все объекты, очистил все участки и перезапустил как RStudio, так и мой компьютер.

592   2  

2 ответов:

Попробуйте добавить xpd=TRUE в вашу легенду. То есть

legend("center", c(expression (italic ("F. occidentalis")*" observed"), 
                   expression (italic ("M. pygmaeus")*" observed"), 
                   expression (italic ("F. occidentalis")*" simulated"),
                   expression (italic ("M. pygmaeus")*" simulated")),
       lty = c(1, 1, 1, 2), 
       col = c(1, 2, 1, 2), 
       lwd = c(2.5, 2.5, 1, 1),
       box.lwd = 0, bty = "n", xpd=TRUE)

По умолчанию легенда отсекается областью построения. Этот параметр xpd позволяет строить графики Вне области построения. Смотрите, например, ?par для получения дополнительной информации о xpd.

Это связано с тем, как настроен холст графика и как работает масштабирование этого устройства. Таким образом, вы добавляете легенду в область построения верхнего правого участка. Однако область построения графика - это не полное устройство, а только часть внутри пространства, образованного осями. Если вы масштабируете, эта область построения также будет масштабироваться. Поля вокруг области построения не изменяют размер, поэтому масштабирование делает область построения настолько маленькой, что она не вписывается в легенду. длиннее. Он скрыт полями вокруг области построения графика.

По этой причине AEBilgrau очень прав, вам нужно добавить xpd = TRUE. Это позволяет легенде выходить за пределы области построения, поэтому она не исчезает за полями при изменении размера устройства построения.

Comments

    Ничего не найдено.