2015-09-19 32 views
7

Desidero avere un R expression in un'etichetta faccetta ggplot2.Espressione nelle etichette delle faccette ggplot2

Diciamo che sto tracciando il 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 

come segue:

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

Invece di avere "femminile" e "maschile" come etichette sfaccettatura I vorrebbe avere: "Donna soggetti" e "Maschio soggetti ", rispettivamente. Per quanto ne so, il corsivo di un'etichetta in R è ottenuto tramite la funzione expression, ma non so come combinarlo con facet_wrap.

+0

Si potrebbe utilizzare una funzione personalizzata, è possibile utilizzare con l'argomento etichettatrice, si veda [qui] (http://stackoverflow.com/questions/30923852/include-t-character-in-facet-strip-text-with-custom-labeller) – RHA

+0

Non mi è chiaro come si ottiene l'argomento dell'etichettatrice di facet_grid per sostituire il fattore con un'espressione e avere le sfaccettature in file con le etichette in alto, come in il mio esempio (piuttosto che sul lato come nelle etichette facet_grid per le righe). – user1701545

+0

Hai controllato questo argomento? Potrebbe aiutare http://stackoverflow.com/questions/20037843/how-to-use-italics-for-facet-labels-in-ggplot2 – Boidot

risposta

4

Sembra eccessivamente complicato, ma funziona. Dovrai usare lo 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

Sapevo che doveva essere una funzione ma non riuscivo a farlo funzionare. Qualche idea sul perché questo non funziona con facet_wrap? – RHA

+0

@RHA 'facet_wrap' non supporta etichettatrici personalizzate come è (non so perché), ma c'è una soluzione alternativa di basso livello come mostrato [qui] (http://stackoverflow.com/questions/19282897/how- to-add-espressioni-per-etichette-in-sfaccettatura-wrap). – tonytonov

3

Dal 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))