在用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是否有一种方法可以在退出时重新设置绘图参数,同时也允许多面板绘图?
发布于 2017-03-04 02:43:41
我们可以避免干扰多面板图,只保存/restoring的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))https://stackoverflow.com/questions/42590620
复制相似问题