usuń tytuł legendy w ggplot

111

Próbuję usunąć tytuł legendy w 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")

wprowadź opis obrazu tutaj

Widziałem to pytanie i wydaje mi się, że żadne z rozwiązań nie działa dla mnie. Większość podaje błąd dotyczący tego, w jaki sposób optsjest przestarzały, i themezamiast tego używać . Próbowałem zostały również różne wersje theme(legend.title=NULL), theme(legend.title=""), theme(legend.title=element_blank), wiadomości itd. Typowe błędy to:

'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)

Używam ggplot2po raz pierwszy od czasu wydania wersji 0.9.3 i trudno mi się poruszać po niektórych zmianach ...

smillig
źródło
5
Możesz użyć labs()do tego: Dodaj linię labs(colour = "")do swojego kodu, która utworzyła powyższy wykres.
Dennis

Odpowiedzi:

191

Prawie byłeś: po prostu dodaj 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())

Ta strona Cookbook for R zawiera wiele szczegółów na temat dostosowywania legend.

juba
źródło
2
Spowoduje to usunięcie wszystkich tytułów legend. Aby uzyskać większą kontrolę lokalną, guide = guide_legend()polecenie działa. Aby usunąć tytuł legendy wypełnienia, ale zachować tytuł legendy koloru, np.scale_fill_brewer(palette = "Dark2", guide = guide_legend(title = NULL)) + scale_color_manual(values = c("blue", "white", "red"))
PatrickT
9

To również działa i pokazuje również, jak zmienić tytuł legendy:

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  scale_color_discrete(name="")
Roland
źródło
7
Spowoduje to zastąpienie tytułu pustym ciągiem, co spowoduje powstanie dodatkowej przestrzeni między etykietą a polem legendy, która byłaby widoczna tylko wtedy, gdyby legenda miała ramkę lub tło w kolorze innym niż miejsce, w którym się znajduje. Jest więc w porządku, jeśli chodzi o szybkie i gotowe podejście w prostych przypadkach, takich jak, theme_bw()ale nie najlepsze, w przypadkach, gdy legenda ma wokół siebie ramkę i jest umieszczona gdzieś na obszarze fabuły (moje zwykłe podejście).
PatrickT
1
+1 za obserwację. Miałem problem z użyciem dwóch różnych legend i spacji między nimi, która została utworzona przez powyższe rozwiązanie. Ustawienie scale_color_manual(name=element_blank())+niższej legendy rozwiązało to za mnie
joaoal
@joaoal, element_blank()wydaje się być zalecanym podejściem. Ustawienie name = NULL to inny sposób.
PatrickT
1

Inna opcja przy użyciu labsi ustawieniu koloru na NULL.

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

wprowadź opis obrazu tutaj

mpalanco
źródło
0

Dla Error: 'opts' is deprecated. Użyj theme()zamiast tego. (Nieistniejącego; ostatnio używany w wersji 0.9.1)”Wymieniłem opts(title = "Boxplot - Candidate's Tweet Scores")z labs(title = "Boxplot - Candidate's Tweet Scores"). Zadziałało!

Shradha Shiwani
źródło
0

Ponieważ możesz mieć więcej niż jedną legendę na wykresie, sposobem wybiórczego usunięcia tylko jednego z tytułów bez pozostawiania pustego miejsca jest ustawienie nameargumentu scale_funkcji na NULL, tj.

scale_fill_discrete(name = NULL)

(pochwały dla @pascal za komentarz w innym wątku )

vkehayas
źródło