首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在函数中重置par()

在函数中重置par()
EN

Stack Overflow用户
提问于 2017-03-04 00:28:24
回答 1查看 2.9K关注 0票数 9

在用R编写绘图函数时,我不想修改全局环境,所以我包括了以下内容

代码语言:javascript
复制
op <- par()
on.exit(par(op))

但这并不令人满意,因为它发出了警告信息(如"In par(op) : graphical parameter "cin" cannot be set"),但更重要的是,它与多个面板图不兼容。例如,如果我有一个简单的函数,比如

代码语言:javascript
复制
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")
}

对于单个地块(除了警告之外),它会很好地工作,但是与多个面板图不兼容。

代码语言:javascript
复制
par(mfrow = c(2, 2))
pfun(1:10)
pfun(10:1) # overwrites the first plot rather than plotting in the second panel

是否有一种方法可以在退出时重新设置绘图参数,同时也允许多面板绘图?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-04 02:43:41

我们可以避免干扰多面板图,只保存/restoring的par元素,我们在函数中改变。在本例中,这意味着只存储bgcolaxis.col。重要的是避免干扰控制多点位置的图形参数(特别是mfrowmfcolmfg)。

代码语言:javascript
复制
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设置参数时,它将无形地返回我们更改的参数的旧值的列表。因此,以下内容将很好地工作:

代码语言:javascript
复制
  op <- par(bg = "gray21", col = "deeppink", col.axis = "deeppink")
  on.exit(par(op))
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42590620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档