2012-07-30 22 views
61

Ich habe einen einfachen Datenrahmen, ich versuche, eine kombinierte Linie und Punkt-Plot mit ggplot2 zu tun. meine Daten Nimmt man sieht wie folgt aus:Entfernen Sie zusätzliche Legenden in ggplot2

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

Und ich versuche, eine Handlung zu machen:

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 

Das Ergebnis sieht gut aus mit einer Ausnahme. Es hat eine zusätzliche Legende, die das Alpha für meine geom_point Schicht zeigt.

Extra Legend for geom_point transparency

Wie kann ich die Legende zeigt Gruppe Farben, aber nicht die, die meine Alpha-Einstellungen zeigt?

Antwort

123

Ästhetik kann gesetzt oder innerhalb eines ggplot Anruf zugeordnet.

  • Eine ästhetische innerhalb aes(...) definiert ist aus den Daten zugeordnet ist, und eine Legende geschaffen.
  • Eine Ästhetik kann auch auf einen einzelnen Wert, indem Sie es außerhalb aes() definieren.

In diesem Fall scheint es, Sie möchten gesetzt alpha = 0.8 und Kartecolour = group.

Um dies zu tun,

Platz der alpha = 0.8 außerhalb der aes() Definition.

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 

enter image description here

Für abgebildet Variable Sie das Aussehen einer Legende unterdrücken kann durch guide = 'none' im entsprechenden scale_... Anruf mit. z.B.

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

, die eine identische Handlung

EDIT @ Jorans Kommentar zurückkehren wird, ist genau richtig, ich meine Antwort umfassen

+12

Dies ist die richtige Methode, da die OP setzt statt Abbilden eines ästhetischen, aber im Allgemeinen können Sie das Aussehen von jeder Legende mit so etwas wie 'g + scale_alpha (Führungs =„none“)' unterdrücken. – joran

+0

In der Tat. Die Antwort wurde ausgearbeitet. Es macht mehr Sinn, eine umfassende Antwort zu haben, nicht nur für das OP-Problem. – mnel

+4

Vielen Dank für die zusätzliche Erklärung. Dies hilft mir, die Philosophie von ggplot zu verstehen. – Wilduck

0

Für alte Versionen von ggplot2 gemacht haben (Versionen vor 0.9 .2, veröffentlicht Ende 2012), sollte diese Antwort funktionieren:

Ich versuchte dies mit einer colour_scale und es hat nicht funktioniert. Es scheint, dass das Element wie eine Funktion mit einem Standardparameter TRUE funktioniert. Ich fügte scale_colour_hue(legend=FALSE) hinzu und es funktionierte.

Ich bin nicht sicher, ob dies der Fall für alle Artikel Farbskala ist in ggplot

+3

Die Verwendung von 'Legende' in einem' scale_ * 'Aufruf ist veraltet, besser zu tun 'scale_colour_hue (guide =" none ")'. – Gregor

+2

unter Berücksichtigung, dass die "Legende = FALSE" ist veraltet, wie durch @shujaa Kommentar hingewiesen, ist dies effektiv eine doppelte Antwort, d. H. Die 'guide =" none "' zu einer "scale_fill/color *' -Funktion hinzufügen. –

13

einfach den show.legend = F Code nach dem Teil hinzufügen, wo Sie wollen es nicht.

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) 
Verwandte Themen