2017-01-20 5 views
1

Ich versuche, Legendenschlüssel genau die Grafik mit den theme() und Funktionen übereinstimmen.Problem mit der Feinabstimmung Legendentaste in ggplot2

Beginnend mit diesem Grundstück:

library(ggplot2) 
data(mpg) 

mpg$year <- as.numeric(mpg$year) 
means <- tapply(mpg$displ, list(mpg$year), FUN = mean) 
means <- as.data.frame(means) 
means$year <- as.numeric(row.names(means)) 
names(means)[1] <- "displ" 

p1 <- 
    ggplot(mpg, aes(x = year, y = displ)) + 
    geom_jitter(aes(color = "points")) + 
    geom_errorbar(data = means, aes(ymin = displ, ymax = displ, 
    color = "mean")) + 
    scale_x_continuous(breaks = c(1998, 2008)) 

p1 

ich einen Plan, wo ich Legende Schlüssel ändern kann mit:

p1 + theme(legend.key = element_rect(fill = NA), 
legend.title = element_blank()) + 
guides(color = guide_legend(override.aes = 
list(shape=c(NA, 16), linetype=c(1, 0), fill = c(NA, NA)))) 

Erste das gewünschte Ergebnis: Legend keys matching plot

Wenn jedoch die Plot enthält auch geom_ribbon() die gleiche Methode schlägt fehl:

p2 <- 
    ggplot(mpg, aes(x = year, y = displ)) + 
    geom_jitter(aes(color = "points")) + 
    geom_ribbon(aes(ymin = 3, ymax = 4, color = "ribbon"), 
    fill = "green", alpha = 0.5) + 
    geom_errorbar(data = means, aes(ymin=displ, ymax=displ, 
    color="mean")) + 
    scale_x_continuous(breaks = c(1998, 2008)) 

p2 + theme(legend.key = element_rect(fill = NA), 
    legend.title = element_blank()) + 
    guides(color = guide_legend(override.aes = 
    list(shape=c(NA, 16, NA), linetype=c(1, 0, 0), 
    fill = c(NA, NA, "green")))) 

Plot with incorrect legend keys

Um klar zu sein: Ich mag die Legende, um den Mittelwert darstellt als nur eine gerade rote Linie zu zeigen, wie in der ersten Handlung, keine Grenze, keine Diagonale.

(Ich weiß, ich könnte stat_summary() anstatt einen separaten Datenrahmen erstellen, aber das wird nicht für mein eigentliches Projekt funktionieren).

Vielen Dank für jede Beratung,

Lasse


+0

Haben Sie _need_ in 'aes' die Farbe für die Band zu setzen? – Axeman

+0

Ich denke schon. Ich brauche eine Legende, die sagt, was das Ribbon zeigt, und meines Wissens ist der einzige Weg dies zu tun, eine konstante 'Farbe' in' aes' zu erstellen. –

+0

Sie können stattdessen fill verwenden, wodurch die Zeilen in der Legende vermieden werden. – Axeman

Antwort

3

Dies könnte ein bisschen wie ein Hack, aber ich entfernt die Legende von geom_ribbon und das Band Farb als Punkttyp hinzugefügt (pch = 15) in der Legende. Die Farben sind noch nicht perfekt, aber ich wette, Sie können es schaffen.

p2 <- 
    ggplot(mpg, aes(x = year, y = displ)) + 
    geom_jitter(aes(color = "points")) + 
    geom_ribbon(aes(ymin = 3, ymax = 4, color = "ribbon"), 
       fill = "green", alpha = 0.5, show.legend = FALSE) + 
    geom_errorbar(data = means, aes(ymin=displ, ymax=displ, 
            color="mean")) + 
    scale_x_continuous(breaks = c(1998, 2008)) 

p2 + theme(legend.key = element_rect(fill = NA), 
      legend.title = element_blank()) + 
    guides(color = guide_legend(override.aes = 
           list(shape=c(NA, 16, 15), linetype=c(1, 0, 0), 
            color = c("red", "green", "green"), 
            alpha = c(1,1,.5), 
            size = c(1,2,6)))) 

Plot

+0

Vielen Dank, aber wenn ich Ihren Code ausführen, bekomme ich Ihre Handlung nicht? Ich bekomme alle drei Legendenschlüssel mit grüner Füllung? –

+0

Haben Sie auch show.legend in geom_ribbon geändert? – Wietze314

+0

Ja. Ich kopiere einfach Ihren Code, einschließlich 'show.legend = FALSE'. Ich renne: R Version 3.2.2 (2015.08.14) Plattform: x86_64-w64-mingw32/x64 (64-Bit) Lauf unter: Windows 7 x64 (Build 7601) Service Pack 1 ggplot2_1.0.1 Danke für Ihre Mühe, @ Wietze314 –