在启动时将PAR重置为默认值

89

通常我自己编写绘图函数时,会使用以下结构:

op <- par("mypar"=myvalue)
on.exit(par(op))

如何将par恢复为先前的默认值是标准方法。想象一下,您已经运行了一些更改了一些参数的函数,并且您需要在R启动时重置为默认值。有什么方便的方法可以这样做吗?

换句话说:如何达到par()的默认值?


5
我认为每次启动新的图形设备时,它都会自动赋予默认值。 - James
3
他们确实有,但我认为@Joris Q的重点是,如果没有保存默认值,是否有一种方法可以重置当前设备的参数。换句话说,我们如何确定设备的默认参数,而不是当前参数。 - Gavin Simpson
7
好的,dev.new()dev.off()可以使用。 - James
1
@James 确实如此;我在 R 标签聊天室中向 @Joris 提到了这一点,但我们想要一个不那么 hacky 的解决方案 :-) - Gavin Simpson
6个回答

116
每次打开新设备时,par() 将被重置,因此另一个选择是简单地进行 dev.off() 并继续。

6
在所有提供的回复中,这是唯一一个真正回答了所问的问题。 - gented
8
如果我们要在一个PDF文件中绘制多个图形,使用dev.off()是否不太合适?因为这会关闭pdf设备,所以无法在同一个pdf中绘制多个图形。 - joel.wilson

54

这种方法有点hacky,但是:

resetPar <- function() {
    dev.new()
    op <- par(no.readonly = TRUE)
    dev.off()
    op
}

这个方法勉强可行,但它会在屏幕上暂时闪现一个新设备...

例如:

> par(mfrow = c(2,2)) ## some random par change
> par("mfrow")
[1] 2 2
> par(resetPar())     ## reset the pars to defaults
> par("mfrow")        ## back to default
[1] 1 1

3
根据par帮助页面的警告,避免尝试重置大小调整后可能已更改的项目,例如mai、mar、pin、plt和pty可能更安全。 - IRTFM
2
类似的想法在 R-help 上进行了讨论:http://tolstoy.newcastle.edu.au/R/e2/help/07/09/26665.html - Aaron left Stack Overflow
没找到其他的东西,那就只能这样了。 - Joris Meys
@h.l.m 这个在 RStudio 上不工作是什么意思?这与他们的设备有关吗?上面的代码启动了一个新的设备吗? - Gavin Simpson
1
我收到了以下错误信息:'警告信息:在(function ())中:只允许一个RStudio图形设备'。 - h.l.m
3
@h.l.m 很困难;因为 R 不存储默认值,所以只能有一个这样的设备,并且没有简单的方法来获取它们。请向 RStudio 的人询问此事。或者,不要更改 par() 而不存储默认值。或者通过你的 .Rprofile 在启动时获取默认值。 - Gavin Simpson

23

来自Quick-R

par()              # view current settings
opar <- par()      # make a copy of current settings
par(col.lab="red") # red x and y labels 
hist(mtcars$mpg)   # create a plot with these new settings 
par(opar)          # restore original settings

15
我知道这个命令,但它不会恢复之前更改的默认值。par() 显示当前的设置,而非默认设置。 - Joris Meys
5
这个解决方案可能在这种情况下无法运作,但让我们将其留在这里作为一种不可行的方法。 - Anusha

4

一个用于防止函数更改用户par的替代方案。你可以在函数早期设置默认参数,这样就不会在函数执行过程中更改图形参数和布局。详见?on.exit

on.exit(layout(1))
opar<-par(no.readonly=TRUE)
on.exit(par(opar),add=TRUE,after=FALSE)

2

dev.off()是最好的函数,但它也会清除所有的图形。如果你想在窗口中保留图形,在开始时保存默认的par设置:

def.par = par()

然后,当你使用你的par函数时,你仍然有一个默认的par设置备份。在生成图形之后,最后完成:

par(def.par) #返回到默认的par设置

这样,你可以保留生成的图形并重置par设置。


3
请注意,某些绘图参数是只读的,因此无法重置。因此,最好将您最初的“全局调用”到 par 命令写成 par(no.readonly = TRUE) - BroVic

1
使用以下脚本将1个图表恢复正常:

par(mfrow = c(1,1))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接