这听起来很简单,我确信它是......
如果您使用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)
一定有更简单的方法。
您可以“保存”默认值,然后重新应用它们:
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)