сброс par () в функции
при написании функции построения графика в R я бы не хотел изменять глобальную среду, поэтому я включаю что-то вроде
op <- par()
on.exit(par(op))
но это менее удовлетворительно, потому что он выдает предупреждающие сообщения (например, "In par(op) : graphical parameter "cin" cannot be set"
), но что более важно, он не совместим с multi-группы участков. Например, если бы у меня была простая функция, такая как
pfun <- function(x) {
op <- par()
on.exit(par(op))
par(bg = "gray21", col = "deeppink", col.axis = "deeppink")
plot(x,
xaxt = "n",
yaxt = "n",
col = "deeppink",
cex = 2,
pch = 22,
bg = "deeppink",
col.lab = "deeppink")
axis(1, col = "deeppink")
axis(2, col = "deeppink")
}
он отлично подходит для одного участка (кроме предупреждений), но несовместим с многопанельными участками, например,
par(mfrow = c(2, 2))
pfun(1:10)
pfun(10:1) # overwrites the first plot rather than plotting in the second panel
есть ли способ сбросить параметры графика при выходе, а также разрешить многопанельный график?
1 ответов
мы можем избежать вмешательства в многопанельные графики, только сохраняя / восстанавливая элементы par
что мы меняем в функции. В этом случае это означает только хранение bg
, col
и axis.col
. Важно избегать вмешательства в графические параметры (в частности,mfrow
, mfcol
и mfg
), которые контролируют позиции мультипликатора.
pfun <- function(x) {
op <- par('bg', 'col', 'col.axis')
on.exit(par(op))
par(bg = "gray21", col = "deeppink", col.axis = "deeppink")
plot(x,
xaxt = "n",
yaxt = "n",
col = "deeppink",
cex = 2,
pch = 22,
bg = "deeppink",
col.lab = "deeppink")
axis(1, col = "deeppink")
axis(2, col = "deeppink")
}
или, даже немного аккуратнее, использовать тот факт, что когда мы устанавливаем параметры с par
это невидимо возвращает список старый значения параметров, которые мы изменили. Так что просто следующее будет работать хорошо:
op <- par(bg = "gray21", col = "deeppink", col.axis = "deeppink")
on.exit(par(op))