Supprimer les légendes supplémentaires dans ggplot2

91

J'ai un cadre de données simple que j'essaie de faire un tracé combiné de lignes et de points en utilisant ggplot2. Supposons que mes données ressemblent à ceci:

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

Et j'essaye de faire un complot:

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

Le résultat semble correct à une exception près. Il a une légende supplémentaire montrant le alphapour ma geom_pointcouche.

Légende supplémentaire pour la transparence <code> geom_point </code>

Comment puis-je conserver la légende affichant les couleurs du groupe, mais pas celle qui affiche mes paramètres alpha?

Wilduck
la source

Réponses:

172

L'esthétique peut être définie ou mappée dans un ggplotappel.

  • Une esthétique définie à l'intérieur aes(...)est mappée à partir des données et une légende créée.
  • Une esthétique peut également être fixée à une valeur unique, en la définissant à l'extérieur aes().

Dans ce cas, il semble que vous souhaitez définir alpha = 0.8 et mapper colour = group .

Pour faire ça,

Placez l' alpha = 0.8extérieur de la aes()définition.

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

entrez la description de l'image ici

Pour toute variable mappée , vous pouvez supprimer l'apparence d'une légende en utilisant guide = 'none'dans l' scale_...appel approprié . par exemple.

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

Qui renverra un tracé identique

Le commentaire de EDIT @ Joran est parfait, j'ai rendu ma réponse plus complète

mnel
la source
18
C'est la bonne méthode, car l'OP définit plutôt que de mapper une esthétique, mais en général, vous pouvez supprimer l'apparence de toute légende en utilisant quelque chose comme g + scale_alpha(guide = "none").
joran
En effet. La réponse a été élaborée. Il est plus judicieux d’avoir une réponse complète, pas seulement spécifique au problème du PO.
mnel
4
Merci beaucoup pour l'explication supplémentaire. Cela m'aide grandement à comprendre la philosophie de ggplot.
Wilduck
2
J'utilise ggplot depuis plus d'un an et je n'ai JAMAIS compris la différence entre une variable mappée ou définie. C'est de loin la meilleure réponse SO que j'ai jamais vue, félicitations.
Amit Kohli
1
@theforestecologist C'est parce que l' groupesthétique ne génère pas d'échelle ou de guide à elle seule. Il s'agit toujours de modifier quelque chose d'autre. Vous n'obtiendrez jamais une légende pour l'esthétique du «groupe».
joran
41

Ajoutez simplement le show.legend = Fcode après la partie où vous ne le souhaitez pas.

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)
CSV
la source
1
C'est beaucoup plus intuitif que la cartographie par rapport à l'esthétique du réglage (bien que cela élimine également beaucoup de malentendus)
Wassadamo
1

Pour les anciennes versions de ggplot2 (versions antérieures à 0.9.2, publiées fin 2012), cette réponse devrait fonctionner:

J'ai essayé cela avec un colour_scaleet cela n'a pas fonctionné. Il semble que l' colour_scale_hueélément fonctionne comme une fonction avec un paramètre par défaut TRUE. J'ai ajouté scale_colour_hue(legend=FALSE)et cela a fonctionné.

Je ne suis pas sûr que ce soit le cas pour tous les éléments d'échelle de couleurs dans ggplot

Crêpe georgette
la source
3
L'utilisation legenddans un scale_*appel est obsolète, mieux vaut le faire scale_colour_hue(guide = "none").
Gregor Thomas
3
en tenant compte du fait que le legend=FALSEest obsolète, comme indiqué par le commentaire @shujaa, il s'agit en fait d'une réponse en double, c'est-à-dire d'ajouter le guide = "none"à une scale_fill/color*fonction.
David LeBauer