2016-08-26 3 views
6

Ist es möglich, unabhängige Streifenthemen für jede in ggplot2 facet_wrap verwendete Variable zu verwenden?Unabhängige Streifenthemen für ggplot2 facet_wrap, die mehr als eine Variable verwenden

Nehmen Sie dieses Stück Code als Beispiel:

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

Plot output

Ich möchte obere Streifen haben ('Zyl') mit einem anderen Thema - sagen wir, fett gedruckt. Außerdem möchte ich "drv" kursiv und mit einer anderen Schriftart und -größe gestalten. Wie könnte ich das tun?

Ich dachte etwas in den Zeilen:

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

Leider konnte ich nicht so etwas wie dies in der Dokumentation oder vorherigen Fragen.

Prost

Edit: habe ich die Frage etwas allgemeiner zu der Gemeinde weiterer Hilfe zu sein.

+2

[Wie verschiedene Schriftgrößen in ggplot Facette Wrap-Etiketten verwenden?] (Http://stackoverflow.com/questions/36334486/how-to-use-different-font-sizes- in-ggplot-facet-wrap-labels) scheint relevant zu sein. – Henrik

Antwort

3

Vordergründig sollten Sie in der Lage sein, eine neue Funktion auf label_both Basis zu machen fett Etiketten zurückzukehren, aber bisher habe meine Versuche mit den gefürchteten Error in variable[[i]] : subscript out of bounds beendet.

Eine Alternative dazu ist, eine Funktion zu erstellen, um das gewünschte Label zu erstellen. Dies ist ähnlich wie this answer. In dieser Funktion fügen Sie den Werten der Variablen das Präfix hinzu und machen sie fett.

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

Nun, diese Funktion innerhalb as_labeller für die in facet_wrap "cyl" Variable. Sie möchten den Standard-Bezeichner innerhalb von as_labeller zu label_parsed ändern, damit der Ausdruck korrekt analysiert wird. Verwenden Sie label_both für die andere Variable.

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

Das ist definitiv ein Ausweg, danke. Ich bin jedoch dabei, den Parameter 'label_both' für' cyl 'zu verwenden, um den Aufruf' prefix = "cyl:" 'zu verankern. Es wäre auch interessant, diese Funktion frei von Beschränkungen zu verwenden (z. B. stattdessen mit "label_value"). –

+0

Ich stimme zu, dass es schön wäre, den Bezeichner nicht auf Ihre spezielle Variable zu codieren (obwohl Sie nicht "" cyl: "' verwenden müssen, verwenden Sie stattdessen Ihren Variablennamen). Ich folge Ihrem zweiten Satz nicht ganz, da die Funktion, die ich geschrieben habe, speziell dazu gedacht ist, mit 'label_parsed' verwendet zu werden, um' bold' zu verwenden. – aosmith

+0

Ja, ich meinte '" Zyl: "' nur als Beispiel (in meinem Fall ist das "Methode:"). Entschuldigung, wenn mir der zweite Satz nicht klar war. Was ich sagen wollte, ist, dass diese Lösung nur funktioniert, wenn wir den Namen der Variablen explizit in die Funktion schreiben (und sie wird in den Streifen selbst aufgenommen) - es wäre gut für sie zu funktionieren, wenn ich nicht "Zyl." : 4 "," Zyl: 5 "," Zyl 6 "," Zyl: 8 "im Streifentext, nur" 4 "," 5 "," 6 "und" 8 ". –

Verwandte Themen