2016-10-28 51 views
1

這聽起來很簡單,我確信它是...重置update_geom_defaults()在GGPLOT2

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

ggplot2::update_geom_defaults("line", list(colour = 'red', linetype = 2)) 

你如何返回GGPLOT2到原來的默認值?

到目前爲止,所有我所發現的是,以檢查是否ggplot2被加載,如果它是然後卸下並重新加載因此「復位」的默認值,但是,似乎是一個可怕的黑客。

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

必須有一個更簡單的方法。

+0

如果你要設置新的默認值,然後在相同的R會話重新設置,在我看來,你還不如干脆修改的美學你的' ggplot()'調用或創建一個新主題。 – mtoto

回答

1

可以 「拯救」 的默認值,然後重新應用:

old <- ggplot2:::find_subclass("Geom","line")$default_aes 

> 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 

然後回:

update_geom_defaults("line", old) 

這是笨重的,在我看來。創建一個劇情功能,或者簡單地添加或刪除+ 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 
} 
+0

我不會推薦'在函數內部使用'update_geom_defaults()'。使用模式更類似於如果您必須應用公司主題或某種特性,則可以將其放入包中的「Rprofile.site」或「.onLoad」函數。如果你在一個函數內部做這件事,最好是按順序調整你的圖,我會更新我的示例函數。 –

+0

不錯。我同意這很笨重。 我有一個功能,可以選擇在aes(col = column)的數據框中添加一列的顏色,如果它不是'aes(),col ='red''。 更改默認的一種方式和背部似乎比 '如果()其他()'使用一個與 'geom_line(AES(COL =列))'和'geom_line(AES()語句,列一個更好的辦法='紅')'依賴於'缺少(col)'。 –

+0

看看上面的示例圖功能。實質上,您只需根據條件添加圖層。這是更典型的方法。 –