2015-09-19 7 views
7

Ich möchte eine R expression in einem ggplot2 facet-Label haben.Ausdruck in ggplot2 Facettenetiketten

Sagen wir, ich bin Plotten der 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 

wie folgt:

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

Statt "weiblich" und "männlich" als Facette Etiketten mit I möchte haben: "weiblich Themen" und "Male Themen ", beziehungsweise. Soweit ich weiß, wird eine Beschriftung in R durch die expression-Funktion kursiv gemacht, aber ich weiß nicht, wie ich das mit facet_wrap kombinieren soll.

+0

Sie eine benutzerdefinierte Funktion verwenden können, um Sie mit dem Etikettierer Argument verwenden können, finden Sie [hier] (http://stackoverflow.com/questions/30923852/include-t-zeichen-in-facet-strip-text-with-custom-etikettierer) – RHA

+0

Es ist mir nicht klar, wie Sie das Labeler-Argument von facet_grid erhalten, um den Faktor durch einen Ausdruck zu ersetzen und die Facetten zu haben in Reihen mit den Etiketten oben, wie in mein Beispiel (anstatt auf der Seite wie in facet_grid Etiketten für Zeilen). – user1701545

+0

Haben Sie dieses Thema überprüft? Es könnte helfen http://stackoverflow.com/questions/20037843/how-to-use-italics-for-facet-labels-in-ggplot2 – Boidot

Antwort

4

Sieht übermäßig kompliziert aus, funktioniert aber. Sie müssen jedoch facet_grid verwenden.

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

erreichen kann. Ich wusste, dass es eine Funktion sein musste, aber es konnte nicht funktionieren. Irgendwelche Gedanken darüber, warum das mit facet_wrap nicht funktioniert? – RHA

+0

@RHA 'facet_wrap' unterstützt keine benutzerdefinierten Etikettierer wie es ist (ich weiß nicht warum), aber es gibt eine Low-Level-Problemumgehung wie hier [hier] (http://stackoverflow.com/questions/19282897/how- Hinzufügen von Ausdrücken zu Labels im Facetten-Wrap – tonytonov

3

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