2017-06-16 95 views
3

我有以下的代碼在GGPLOT2:如何在ggplot2中創建類似於theme_bw的自定義主題?

require("ggplot2") 
df <- data.frame(x=factor(rep(1:2,5)), y=rnorm(10)) 

ggplot(df , aes(x,y)) + geom_point(size = 3) + 
theme(axis.text.x = element_text(angle = 40, hjust = 1, colour = "black", size=12), 
     plot.title = element_text(size=16, face="bold", hjust=0.5)) + 
labs(title = "Plot") 

現在,我想改變背景顏色theme_bw,但隨後的主標題和X軸選項將變回默認。

ggplot(df , aes(x,y)) + geom_point(size = 3) + 
theme(axis.text.x = element_text(angle = 40, hjust = 1, colour = "black", size=12), 
     plot.title = element_text(size=16, face="bold", hjust=0.5)) + 
labs(title = "Plot") + 
theme_bw() 

那麼,如何將主題更改爲與theme_bw相同,但不會丟失其他選項?

感謝

+2

如何在'theme_bw()'之後添加自定義主題? –

+2

更改'theme'元素的順序。因此,首先將主題更改爲'theme_bw',然後再更改其他主題元素。 – aosmith

+0

謝謝,夥計們。是的,它的工作。偉大的解決方案 – Alirsd

回答

4

這裏的解決方案(確保theme_bw()theme()之前要申請使用:

ggplot(df , aes(x,y)) + geom_point(size = 3) + 
theme_bw() + 
theme(axis.text.x = element_text(angle = 40, hjust = 1, colour = "black", size=12), 
     plot.title = element_text(size=16, face="bold", hjust=0.5)) + 
labs(title = "Plot") 
+0

非常感謝你,@A戈爾。真的很聰明的答案。哇。 – Alirsd

+1

您也可以在腳本的開頭設置此主題,並將其應用於所有圖。要做到這一點,在做任何繪圖之前,運行'theme_set(theme_bw()+ theme(...))',其中'...'是'theme'函數中的所有代碼。然後,這個新主題將自動應用於所有後續的繪圖。 – eipi10

+0

@eipi謝謝,是的,它使事情變得更容易 – Alirsd

1

另一個有趣的選擇是編寫一個函數,只有更新如果主題主題元素還沒有定義,因此它會類似於+,但是主題不能被覆蓋,只能添加:

`%+safe%` <- function(e1, e2){ 
    if (!is.theme(e1) || !is.theme(e2)) { 
    stop("%+replace% requires two theme objects", call. = FALSE) 
    } 

    not_in_e1 <- names(e2)[!names(e2) %in% names(e1)] 
    e1[not_in_e1] <- e2[not_in_e1] 
    e1 
} 

ggplot(df , aes(x,y)) + geom_point(size = 3) + labs(title = "Plot") + 
    theme(axis.text.x = element_text(angle = 40, hjust = 1, colour = "black", size=12), 
     plot.title = element_text(size=16, face="bold", hjust=0.5)) %+safe% theme_bw() 

請注意,這需要兩個theme對象,因此無論如何您必須移動labs()

相關問題