rimuove il titolo della legenda in ggplot


111

Sto cercando di rimuovere il titolo di una leggenda 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")

inserisci qui la descrizione dell'immagine

Ho visto questa domanda e nessuna delle soluzioni sembra funzionare per me. La maggior parte dà un errore su come optsè deprecato e da usare themeinvece. Ho anche provato varie versioni di theme(legend.title=NULL), theme(legend.title=""), theme(legend.title=element_blank), messaggi ecc errore tipico sono i seguenti:

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

Sto usando ggplot2per la prima volta da quando è stata rilasciata la versione 0.9.3 e trovo difficile navigare alcune delle modifiche ...


5
Puoi usare labs()per questo: Aggiungi la riga labs(colour = "")al tuo codice che ha prodotto il grafico sopra.
Dennis

Risposte:


191

Eri quasi arrivato: basta aggiungere 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())

Questa pagina su Cookbook for R fornisce molti dettagli su come personalizzare le leggende.


2
Questo rimuoverà tutti i titoli delle legende. Per un controllo più locale, il guide = guide_legend()comando funziona. Per rimuovere il titolo della legenda di riempimento, ma per mantenere il titolo della legenda dei colori, ad esempioscale_fill_brewer(palette = "Dark2", guide = guide_legend(title = NULL)) + scale_color_manual(values = c("blue", "white", "red"))
PatrickT

9

Funziona anche questo e dimostra anche come cambiare il titolo della legenda:

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

7
Questo sostituisce il titolo con una stringa vuota e quindi crea uno spazio aggiuntivo tra l'etichetta e il riquadro della legenda, che sarebbe visibile solo se la legenda avesse un riquadro o uno sfondo di colore diverso da quello in cui è posizionato. Quindi va bene per un approccio rapido e pronto in casi semplici come theme_bw()ma non il migliore nei casi in cui la leggenda ha una scatola attorno ad essa ed è posizionata da qualche parte nell'area della trama (il mio approccio abituale).
PatrickT

1
+1 per l'osservazione. ho avuto il problema utilizzando due diverse leggende e lo spazio bianco tra di loro che è stato creato dalla soluzione di cui sopra. L'impostazione scale_color_manual(name=element_blank())+per la leggenda inferiore ha risolto per me
joaoal il

@joaoal, element_blank()sembra essere l'approccio consigliato. L'impostazione name = NULL è un altro modo.
PatrickT

1

Un'altra opzione che utilizza labse imposta il colore su NULL.

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

inserisci qui la descrizione dell'immagine


0

Per Error: 'opts' is deprecated. Usa theme()invece. (Defunct; ultimo utilizzato nella versione 0.9.1) "Ho sostituito opts(title = "Boxplot - Candidate's Tweet Scores")con labs(title = "Boxplot - Candidate's Tweet Scores"). Ha funzionato!


0

Poiché potresti avere più di una leggenda in una trama, un modo per rimuovere selettivamente solo uno dei titoli senza lasciare uno spazio vuoto è impostare l' nameargomento della scale_funzione su NULL, ad es.

scale_fill_discrete(name = NULL)

(complimenti a @pascal per un commento su un altro thread )

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.