Rimuovi le leggende extra in ggplot2


93

Ho un semplice frame di dati che sto cercando di creare un grafico combinato di linee e punti usando ggplot2. Supponendo che i miei dati siano così:

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
                 group=c(rep("a",10),rep("b",10)))

E sto cercando di creare una trama:

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
g

Il risultato sembra a posto con una sola eccezione. Ha una legenda extra che mostra il alphaper il mio geom_pointlivello.

Legenda extra per la trasparenza di <code> geom_point </code>

Come posso mantenere la legenda che mostra i colori del gruppo, ma non quella che mostra le mie impostazioni alfa?

Risposte:


178

L'estetica può essere impostata o mappata all'interno di una ggplotchiamata.

  • Un'estetica definita all'interno aes(...)viene mappata dai dati e viene creata una legenda.
  • Un'estetica può anche essere impostata su un unico valore, definendolo all'esterno aes().

In questo caso, sembra che desideri impostare alpha = 0.8 e mappare colour = group .

Per farlo,

Posiziona l' alpha = 0.8esterno della aes()definizione.

g <- ggplot(df, aes(x = x, y = y, group = group))
g <- g + geom_line(aes(colour = group))
g <- g + geom_point(aes(colour = group), alpha = 0.8)
g

inserisci qui la descrizione dell'immagine

Per qualsiasi variabile mappata è possibile sopprimere l'aspetto di una legenda utilizzando guide = 'none'nella scale_...chiamata appropriata . per esempio.

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
        geom_line(aes(colour = group)) +
        geom_point(aes(colour = group, alpha = 0.8))
g2 + scale_alpha(guide = 'none')

Che restituirà una trama identica

EDIT @ Il commento di Joran è perfetto, ho reso la mia risposta più esauriente


18
Questo è il metodo corretto, poiché l'OP sta impostando piuttosto che mappando un'estetica, ma in generale puoi sopprimere l'aspetto di qualsiasi legenda usando qualcosa di simile g + scale_alpha(guide = "none").
joran

Infatti. La risposta è stata elaborata. Ha più senso avere una risposta esauriente, non solo specifica per la questione del PO.
mnel

4
Grazie mille per la spiegazione aggiunta. Questo fa molto per aiutarmi a capire la filosofia di ggplot.
Wilduck

2
Uso ggplot da oltre un anno e non ho mai capito la differenza tra una variabile mappata o impostata. Questa è di gran lunga la migliore risposta SO che abbia mai visto, complimenti.
Amit Kohli

1
@theforestecologist Questo perché l' groupestetica non genera scale o guide da sola. È sempre una specie di modificare qualcos'altro. Non avrai mai una leggenda per l'estetica "di gruppo".
joran

43

Basta aggiungere il show.legend = Fcodice dopo la parte in cui non lo desideri.

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F)

1
Questo è molto più intuitivo della mappatura rispetto all'estetica delle impostazioni (anche se questo chiarisce anche molti malintesi)
Wassadamo

1

Per le vecchie versioni di ggplot2 (versioni precedenti alla 0.9.2, rilasciate alla fine del 2012), questa risposta dovrebbe funzionare:

L'ho provato con a colour_scalee non ha funzionato. Sembra che l' colour_scale_hueelemento funzioni come una funzione con un parametro predefinito TRUE. Ho aggiunto scale_colour_hue(legend=FALSE)e ha funzionato.

Non sono sicuro che questo sia il caso di tutti gli elementi della scala di colori in ggplot


3
L'utilizzo legendin una scale_*chiamata è deprecato, è meglio farlo scale_colour_hue(guide = "none").
Gregor Thomas,

3
tenendo conto che legend=FALSEè deprecato, come sottolineato da @shujaa comment, questa è effettivamente una risposta duplicata, cioè per aggiungere guide = "none"a una scale_fill/color*funzione.
David LeBauer
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.