在R中编写绘图函数时,我不想修改全局环境,所以我包含了类似
的内容op <- par()
on.exit(par(op))
但这不太令人满意,因为它会发出警告信息(例如"In par(op) : graphical parameter "cin" cannot be set"
),但更重要的是,它与多面板图不兼容。例如,如果我有一个像
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
是否有办法在退出时重置绘图参数,同时还允许多面板绘图?
答案 0 :(得分:5)
我们可以通过仅保存/恢复我们在函数中更改的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))