2015-09-19 87 views
7

我想在ggplot2 facet標籤中使用R expression在ggplot2 facet標籤中的表達式

比方說,我在繪製tipsdata.frame

library(reshape2) 
> head(tips) 
    total_bill tip sex smoker day time size 
1  16.99 1.01 Female  No Sun Dinner 2 
2  10.34 1.66 Male  No Sun Dinner 3 
3  21.01 3.50 Male  No Sun Dinner 3 
4  23.68 3.31 Male  No Sun Dinner 2 
5  24.59 3.61 Female  No Sun Dinner 4 
6  25.29 4.71 Male  No Sun Dinner 4 

如下:

library(ggplot2) 
sp <- ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + 
     geom_point(shape=1) + 
     facet_wrap(~sex, ncol = 1) 

enter image description here

而是有 「女」 和 「男」 的小標籤,我想要有: 「科目」和「男性科目「。據我所知,R中的標籤是通過expression函數實現的,但我不知道如何將其與facet_wrap相結合。

+0

您可以使用自定義功能,您可以用貼標籤機參數中使用,請參閱[這裏](http://stackoverflow.com/questions/30923852/include-t-character-in-facet-strip-text-with-custom-labeller) – RHA

+0

我不清楚你如何獲得facet_grid的labeller參數來替換表達式的因子並且具有方面在標籤頂部的行中,如我的例子(而不是像在facet_grid標籤中那樣)。 – user1701545

+0

您是否檢查了這個話題?它可能有幫助 http://stackoverflow.com/questions/20037843/how-to-use-italics-for-facet-labels-in-ggplot2 – Boidot

回答

4

看起來過於複雜,但工作。不過你必須使用facet_grid

make_label <- function(value) { 
    x <- as.character(value) 
    bquote(italic(.(x))~subjects) 
} 

plot_labeller <- function(variable, value) { 
    do.call(expression, lapply(levels(value), make_label)) 
} 

ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + 
    geom_point(shape=1) + 
    facet_grid(.~sex, labeller = plot_labeller) 

enter image description here

+0

的element_text實現這一點的。我知道它必須是一個函數,但它不能工作。任何想法爲什麼這不適用facet_wrap? – RHA

+0

@RHA'facet_wrap'不支持自定義標籤符(我不知道爲什麼),但是有一個低級別的解決方法,如[這裏]所示(http://stackoverflow.com/questions/19282897/how-對添加表達式到標籤功能於小面套)。 – tonytonov

3

由於ggplot22.1.0

data(tips, package="reshape2") 
library(ggplot2) 
ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + 
    geom_point(shape=1) + 
    facet_wrap(~sex, ncol=1, 
      labeller=label_bquote(.(levels(tips$sex)[sex])~subjects))