Entfernen Sie den Legendentitel in ggplot

111

Ich versuche, den Titel einer Legende zu entfernen in ggplot2:

df <- data.frame(
  g = rep(letters[1:2], 5),
  x = rnorm(10),
  y = rnorm(10)
)

library(ggplot2)
ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom")

Geben Sie hier die Bildbeschreibung ein

Ich habe diese Frage gesehen und keine der Lösungen dort scheint für mich zu funktionieren. Die meisten geben einen Fehler darüber an, wie optsveraltet und themestattdessen zu verwenden ist . Ich habe auch verschiedene Versionen versucht theme(legend.title=NULL), theme(legend.title=""), theme(legend.title=element_blank)etc. Typische Fehlermeldungen sind:

'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1)
'theme_blank' is deprecated. Use 'element_blank' instead. (Deprecated; last used in version 0.9.1)

Ich verwende es ggplot2zum ersten Mal seit der Veröffentlichung von Version 0.9.3 und finde es schwierig, durch einige der Änderungen zu navigieren ...

smillig
quelle
5
Sie können labs()dies verwenden: Fügen Sie die Zeile labs(colour = "")zu Ihrem Code hinzu, der das obige Diagramm erstellt hat.
Dennis

Antworten:

191

Sie waren fast da: fügen Sie einfach hinzu theme(legend.title=element_blank())

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  theme(legend.title=element_blank())

Diese Seite im Kochbuch für R enthält viele Details zum Anpassen von Legenden.

Juba
quelle
2
Dadurch werden alle Legendentitel entfernt. Für eine lokalere Steuerung guide = guide_legend()funktioniert der Befehl. Um den Titel der scale_fill_brewer(palette = "Dark2", guide = guide_legend(title = NULL)) + scale_color_manual(values = c("blue", "white", "red"))
Fülllegende
9

Dies funktioniert auch und zeigt auch, wie der Legendentitel geändert wird:

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  scale_color_discrete(name="")
Roland
quelle
7
Dies ersetzt den Titel durch eine leere Zeichenfolge und verursacht daher zusätzlichen Abstand zwischen der Beschriftung und dem Legendenfeld, der nur sichtbar wäre, wenn die Legende ein Feld oder einen Hintergrund mit einer anderen Farbe als der Position hätte. Es ist also in Ordnung, in einfachen Fällen schnell und bereit zu sein, theme_bw()aber nicht in Fällen, in denen die Legende von einem Kästchen umgeben ist und sich irgendwo auf dem Plotbereich befindet (mein üblicher Ansatz).
PatrickT
1
+1 für die Beobachtung. Ich hatte das Problem mit zwei verschiedenen Legenden und dem Leerzeichen zwischen ihnen, das durch die obige Lösung erstellt wurde. Die Einstellung scale_color_manual(name=element_blank())+für die untere Legende löste es für mich
Joaoal
@joaoal, element_blank()scheint der empfohlene Ansatz zu sein. Das Einstellen name = NULL ist ein anderer Weg.
PatrickT
1

Eine weitere Option, bei labsder Farbe verwendet und eingestellt wird NULL.

ggplot(df, aes(x, y, colour = g)) +
  geom_line(stat = "identity") +
  theme(legend.position = "bottom") +
  labs(colour = NULL)

Geben Sie hier die Bildbeschreibung ein

mpalanco
quelle
0

Für Error: 'opts' is deprecated. Verwenden Sie theme()stattdessen. (Defunct; zuletzt in Version 0.9.1 verwendet) 'Ich habe ersetzt opts(title = "Boxplot - Candidate's Tweet Scores")durch labs(title = "Boxplot - Candidate's Tweet Scores"). Es funktionierte!

Shradha Shiwani
quelle
0

Da Sie möglicherweise mehr als eine Legende in einem Plot haben, können Sie nur einen der Titel selektiv entfernen, ohne ein Leerzeichen zu lassen, indem Sie das nameArgument der scale_Funktion auf setzen NULL, d. H.

scale_fill_discrete(name = NULL)

(Ein großes Lob an @pascal für einen Kommentar zu einem anderen Thread )

vkehayas
quelle