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:
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"))))
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
Haben Sie _need_ in 'aes' die Farbe für die Band zu setzen? – Axeman
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. –
Sie können stattdessen fill verwenden, wodurch die Zeilen in der Legende vermieden werden. – Axeman