2016-08-26 67 views
6

是否可以爲ggplot2中使用的每個變量設置獨立條主題facet_wrapggplot2的獨立條主題facet_wrap使用多個變量

拿這個代碼塊爲例:

p1 <- ggplot(mpg, aes(displ, hwy)) + 
    geom_point() + 
    facet_wrap(c("cyl", "drv"), labeller = "label_both") 
plot(p1) 

Plot output

我想有上帶(「缸」)用不同的主題 - 比如,在加粗。另外,我可能希望製作'drv'斜體並使用不同的字體類型和大小。我怎麼能這樣做?

我想在東西線:

p1 <- p1 + theme(strip.text.variable1 = element_text(face = 'bold'), 
        strip.text.variable2 = element_text(face = 'italic', size = 8) 
       ) 

不幸的是,我無法找到的文檔或以前的問題,像這樣的東西。

乾杯

編輯:我做了這個問題有點更普遍的是向社會的進一步幫助。

+2

[如何使用ggplot小包裝標籤不同的字體大小?](http://stackoverflow.com/questions/36334486/how-to-use-different-font-sizes- in-ggplot-facet-wrap-labels)似乎相關。 – Henrik

回答

3

從表面上看,你應該能夠使基於label_both返回大膽的標籤,一個新的功能,但到目前爲止,我嘗試用可怕的Error in variable[[i]] : subscript out of bounds結束。

另一種方法是構建一個函數來製作所需的標籤。這很像this answer。在此函數中,將前綴添加到變量的值並使其變爲粗體。

make_labels = function(string, prefix = "cyl: ") { 
    x = paste0(prefix, as.character(string)) 
    do.call(expression, lapply(x, function(y) bquote(bold(.(y))))) 
} 

現在facet_wrap使用內as_labeller此功能爲「共青團」變量。您想要將as_labeller中的默認標籤更改爲label_parsed,以便正確解析表達式。使用label_both作爲其他變量。

ggplot(mpg, aes(displ, hwy)) + 
    geom_point() + 
    facet_wrap(c("cyl", "drv"), 
       labeller = labeller(cyl = as_labeller(make_labels, default = label_parsed), 
            drv = label_both)) 

enter image description here

+0

這絕對是一種出路,謝謝。但是,我堅持使用'cyl'的'label_both'參數來錨定'prefix =「cyl:」'調用。使用這個沒有約束的函數也是很有趣的(例如用'label_value'代替)。 –

+0

我同意不將硬編碼器硬編碼到你的特定變量(儘管你不必使用'「cyl:」',不管你的變量名是什麼)。我不太喜歡你的第二句話,因爲我寫的函數專門用於'label_parsed',以便使用'bold'。 – aosmith

+0

是的,我的意思是'「cyl:」'只是作爲一個例子(在我的情況下是''method:'')。對不起,如果我不清楚第二句話。我的意思是說,這個解決方案只有在我們明確地將變量的名稱放在函數中(並且它被包含在條帶本身中)時纔有效 - 如果我不想要「cyl」 :4「,」cyl:5「,」cyl 6「,」cyl:8「,僅爲」4「,」5「,」6「和」8「。 –

相關問題