【发布时间】:2017-03-04 00:28:24
【问题描述】:
在 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
有没有办法在退出时重置绘图参数,同时还允许多面板绘图?
【问题讨论】:
-
请参阅
?par中no.readonly的描述,如何将参数reset_par添加到您的函数中,以便您可以控制是否重置par 设置。你也可以在第一个pfun之后添加par(mfg = c(1,1)) -
啊...谢谢。
no.readonly部分解决了警告。我想我可以为函数添加一个额外的参数。我希望有一个不需要用户输入的替代解决方案,但这是个好主意。 -
谢谢,这也有效,但更大的上下文是我工作中的人们正在使用的包中的一个函数,我宁愿不必教他们在每次调用之前在进行多面板绘图时与
par(mfg = c(1, 1))一起使用。我认为附加参数可能是最好的选择。 -
也许我应该编辑原始帖子,但@rawr 修复了警告问题。我只需要将
no.readonly = TRUE添加到对par()的调用中。