wake-up-neo.com

Legende ggplot entfernen 2.2

Ich versuche, die Legende einer Ebene zu erhalten (glatt) und die Legende der anderen zu entfernen (Punkt). Ich habe versucht, die Legenden mit guides(colour = FALSE) und geom_point(aes(color = vs), show.legend = FALSE) abzuschalten.

Bearbeiten : Da diese Frage und ihre Antworten populär sind, scheint ein reproduzierbares Beispiel in der Reihenfolge:

library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

enter image description here

209
Guy

aus r Kochbuch , wobei bp Ihr ​​ggplot ist:

Legende für eine bestimmte Ästhetik (Füllung) entfernen:

bp + guides(fill=FALSE)

Dies kann auch bei der Angabe des Maßstabs erfolgen:

bp + scale_fill_discrete(guide=FALSE)

Dies entfernt alle Legenden:

bp + theme(legend.position="none")
395
user3490026

Es könnte eine andere Lösung dafür geben:
Ihr Code war:

geom_point(aes(..., show.legend = FALSE))

Sie können den show.legend -Parameter nach dem aes -Aufruf angeben:

geom_point(aes(...), show.legend = FALSE)

dann sollte die entsprechende Legende verschwinden

69
Tjebo

Da die Frage und die Antwort von user3490026 ein Top-Suchtreffer sind, habe ich ein reproduzierbares Beispiel und eine kurze Darstellung der bisher gemachten Vorschläge zusammengestellt mit einer Lösung, die die Frage des OP explizit anspricht.

Eines der Dinge, die ggplot2 macht und die verwirrend sein können, ist, dass bestimmte Legenden automatisch gemischt werden, wenn sie derselben Variablen zugeordnet werden. Zum Beispiel erscheint factor(gear) zweimal, einmal für linetype und einmal für fill, was zu einer kombinierten Legende führt. Im Gegensatz dazu hat gear einen eigenen Legendeneintrag, da er nicht wie factor(gear) behandelt wird. Die bisher angebotenen Lösungen funktionieren in der Regel gut. Gelegentlich müssen Sie jedoch die Hilfslinien außer Kraft setzen. Siehe mein letztes Beispiel unten.

# reproducible example:
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

enter image description here

Alle Legenden entfernen: @ user3490026

p + theme(legend.position = "none")

Alle Legenden entfernen: @duhaime

p + guides(fill = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)

Legenden ausschalten: @Tjebo

ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs), show.legend = FALSE) +
geom_point(aes(shape = factor(cyl)), show.legend = FALSE) +
geom_line(aes(linetype = factor(gear)), show.legend = FALSE) +
geom_smooth(aes(fill = factor(gear), color = gear), show.legend = FALSE) + 
theme_bw() 

Füllung entfernen, damit Linientyp sichtbar wird

p + guides(fill = FALSE)

Wie oben über die Funktion scale_fill_:

p + scale_fill_discrete(guide = FALSE)

Und jetzt eine mögliche Antwort auf die Anfrage des OP

"um die Legende einer Ebene zu erhalten (glatt) und die Legende der anderen zu entfernen (Punkt)"

Schalten Sie einige Ad-hoc-Post-hoc ein oder aus

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = FALSE, 
           shape = FALSE)  

enter image description here

27
PatrickT

Wenn in Ihrem Diagramm sowohl die Ästhetik fill als auch color verwendet wird, können Sie die Legende folgendermaßen entfernen:

+ guides(fill=FALSE, color=FALSE)
13
duhaime