Legende ggplot entfernen 2.2


250

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

Bearbeiten : Da diese Frage und ihre Antworten beliebt 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() 

Geben Sie hier die Bildbeschreibung ein


5
Ein minimal reproduzierbares Beispiel wäre viel einfacher. In der langen Codezeile scheint es eine Menge unnötigen (für das vorliegende Problem) Code zu geben, und er ist völlig unreproduzierbar, wie er derzeit geschrieben wird.
Mnel

Antworten:


445

aus r kochbuch, wo bp dein ggplot ist:

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

bp + guides(fill=FALSE)

Dies kann auch bei der Angabe der Skala erfolgen:

bp + scale_fill_discrete(guide=FALSE)

Dies entfernt alle Legenden:

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

25
Als Antwort auf einen Kommentar von @Alex: Beachten Sie, dass theme_bw()alle Definitionen, die mit verwendet werden, beeinträchtigt werden können theme(). theme_bw()Stellen Sie bei der Verwendung sicher, dass Sie es dem Plot hinzufügen, bevor Sie andere Designoptionen ändern.
Fabern

1
aber wenn ich so etwas mache bp + theme(legend.position="none") + theme_classic(), kommen die Legenden zurück. Wie kann man es entfernen?
loveR

3
@loveR setzen theme_classic zuerst:bp + theme_classic() + theme(legend.position="none")
Hypothese

1
Dies hatte keine Auswirkungen auf meine Handlung. Ich habe den Ansatz von @Tjebo erfolgreich angewendet.
James Hirschorn

80

Möglicherweise gibt es eine andere Lösung:
Ihr Code war:

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

Sie können den show.legendParameter nach dem aesAufruf angeben :

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

dann sollte die entsprechende Legende verschwinden


3
Dies ist ein sehr schöner Ansatz. Auch intuitiver.
PatL

2
Dies war die Lösung, mit der Buchstaben aus der Legende entfernt wurden, als ich geom_text zum Kommentieren von Linien in Farbe verwendete. Es gibt keinen scale_labelBefehl (und das macht guide(label = FALSE)auch keinen Sinn) und es hat auch nicht funktioniert. Vielen Dank!
Melissa Key

45

Da die Frage und die Antwort von user3490026 ein Top-Sucherfolg sind, habe ich ein reproduzierbares Beispiel und eine kurze Illustration der bisher gemachten Vorschläge zusammen mit einer Lösung erstellt, die die Frage des OP explizit behandelt.

Eines der Dinge, die ggplot2tun und verwirrend sein können, ist, dass bestimmte Legenden automatisch gemischt werden, wenn sie derselben Variablen zugeordnet sind. Wird beispielsweise factor(gear)zweimal angezeigt, einmal für linetypeund einmal für fill, was zu einer kombinierten Legende führt. Hat im Gegensatz geardazu einen eigenen Legendeneintrag, da er nicht wie derselbe behandelt wird factor(gear). Die bisher angebotenen Lösungen funktionieren normalerweise gut. Gelegentlich müssen Sie jedoch möglicherweise die Hilfslinien überschreiben. 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() 

Geben Sie hier die Bildbeschreibung ein

Entfernen Sie alle Legenden: @ user3490026

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

Entferne alle Legenden: @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() 

Entfernen Sie die Füllung, damit der Linientyp sichtbar wird

p + guides(fill = FALSE)

Gleich 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 (glatt) zu halten und die Legende der anderen (Punkt) zu entfernen"

Schalten Sie einige Ad-hoc-Post-Hoc aus

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

Geben Sie hier die Bildbeschreibung ein



Geben warnings()Sie ein, nachdem Sie Ihren Code ausgeführt haben, und Sie werden die Gründe dafür sehen, dass das blaue Band nicht angezeigt wird.
Markus

@markus: Verstanden, danke! Ich werde das Beispiel nicht bearbeiten, da das Problem separat ist. Es macht jedoch wenig Sinn, eine Legende zu haben, sewenn sie nicht berechnet wird. Wahrscheinlich ein Problem bei Github wert, aber ich habe momentan nicht die Energie ...
PatrickT

13

Wenn Ihr Diagramm sowohl Ästhetik fillals auch colorÄsthetik verwendet, können Sie die Legende entfernen mit:

+ guides(fill=FALSE, color=FALSE)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.