在ggplot2中重置update_geom_defaults()

Dan*_*eld 6 r ggplot2

这听起来很简单,我确信它是......

如果您使用ggplot2::update_geom_defaults()诸如:

ggplot2::update_geom_defaults("line", list(colour = 'red', linetype = 2))
Run Code Online (Sandbox Code Playgroud)

如何将 ggplot2 返回到其原始默认值?

到目前为止,我发现的只是检查是否ggplot2已加载,如果已加载,则分离并重新加载它,从而“重置”默认值,但这似乎是一个可怕的黑客行为。

  if("ggplot2" %in% (.packages())){
     suppressMessages(suppressWarnings(detach("package:ggplot2", unload=TRUE)))
     suppressMessages(suppressWarnings(library(ggplot2)))}
Run Code Online (Sandbox Code Playgroud)

一定有更简单的方法。

Bra*_*sen 7

您可以“保存”默认值,然后重新应用它们:

old <- ggplot2:::check_subclass("line", "Geom")$default_aes # 2018
old <- ggplot2:::find_subclass("Geom","line")$default_aes # pre 2.0 I think

> old 
* colour   -> "black"
* size     -> 0.5
* linetype -> 1
* alpha    -> NA

update_geom_defaults("line", list(color = "red"))

> ggplot2:::find_subclass("Geom","line")$default_aes
$color
[1] "red"

$colour
[1] "black"

$size
[1] 0.5

$linetype
[1] 1

$alpha
[1] NA
Run Code Online (Sandbox Code Playgroud)

然后返回:

update_geom_defaults("line", old)
Run Code Online (Sandbox Code Playgroud)

在我看来,这很笨拙。您最好创建一个绘图函数,或者简单地添加或删除+ geom_line(). 设置 geom_defaults 背后的想法是为整个会话设置默认值。

绘图函数示例:

my_plotfun <- function(x, opt0, opt1, opt2, opt3) {
 p <- ggplot(x, aes(...))
 if(opt0) 
   p <- p + geom_line(...)
 if(opt1) 
   p <- p + coord_flip()
 if(opt2)
   ...
 p
}
Run Code Online (Sandbox Code Playgroud)