在R中编写绘图函数时,我不想修改全局环境,所以我包含了类似的东西
op <- par()
on.exit(par(op))
Run Code Online (Sandbox Code Playgroud)
但这并不令人满意,因为它会发出警告信息(例如"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")
}
Run Code Online (Sandbox Code Playgroud)
它可以很好地用于单个绘图(除了警告之外),但是与多面板图不兼容,例如
par(mfrow = c(2, 2))
pfun(1:10)
pfun(10:1) # overwrites the first plot rather than plotting in the second panel
Run Code Online (Sandbox Code Playgroud)
有没有办法在退出时重置绘图参数,同时还允许多面板绘图?
我们可以通过仅保存/恢复par我们在函数中更改的元素来避免干扰多面板图.在这种情况下,这意味着只有存储bg,col和axis.col.重要的是,以避免与所述图形参数干扰(特别是mfrow,mfcol和mfg),其控制的multiplot位置.
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")
}
Run Code Online (Sandbox Code Playgroud)
或者,即使是稍微整洁也是要利用这样一个事实:当我们设置参数时,par它会无形地返回我们改变的参数的旧值列表.所以只需以下内容即可:
op <- par(bg = "gray21", col = "deeppink", col.axis = "deeppink")
on.exit(par(op))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |