Supprimer la légende ggplot 2.2

250

J'essaie de garder la légende d'un calque (lisse) et de supprimer la légende de l'autre (point). J'ai essayé de fermer les légendes avec guides(colour = FALSE)et geom_point(aes(color = vs), show.legend = FALSE).

Edit : Comme cette question et ses réponses sont populaires, un exemple reproductible semble dans l'ordre:

library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

entrez la description de l'image ici

Gars
la source
5
Un exemple reproductible minimal serait beaucoup plus simple. Dans la longue ligne de code, il semble y avoir beaucoup de code inutile (au problème en question) ainsi que totalement improductible tel qu'il est actuellement écrit.
mnel
Duplication possible de Désactiver certaines légendes dans un ggplot
Umaomamaomao

Réponses:

445

de r cookbook , où bp est votre ggplot:

Supprimer la légende d'une esthétique particulière (remplissage):

bp + guides(fill=FALSE)

Cela peut également être fait lors de la spécification de l'échelle:

bp + scale_fill_discrete(guide=FALSE)

Cela supprime toutes les légendes:

bp + theme(legend.position="none")
user3490026
la source
25
En réponse à un commentaire de @Alex: Notez que cela theme_bw()peut interférer avec toutes les définitions effectuées à l'aide theme(). Lors de l'utilisation theme_bw(), assurez-vous de l'ajouter à l'intrigue avant de modifier toute autre option de thème.
fabern
1
mais quand je fais quelque chose comme ça bp + theme(legend.position="none") + theme_classic(), les légendes reviennent. Alors, comment l'enlever?
loveR
3
@loveR a mis theme_classic en premier:bp + theme_classic() + theme(legend.position="none")
hypothèse
1
Cela n'a eu aucun effet sur mon intrigue. J'ai utilisé avec succès l'approche de @Tjebo.
James Hirschorn
80

Il pourrait y avoir une autre solution à cela:
Votre code était:

geom_point(aes(..., show.legend = FALSE))

Vous pouvez spécifier le show.legendparamètre après l' aesappel:

geom_point(aes(...), show.legend = FALSE)

alors la légende correspondante devrait disparaître

Tjebo
la source
3
C'est une très belle approche. Plus intuitif aussi.
patL
2
C'était la solution qui a fonctionné pour supprimer des lettres de la légende lorsque j'ai utilisé geom_text pour annoter des lignes en couleur. Il n'y a pas de scale_labelcommande (et cela n'a pas de sens), et guide(label = FALSE)n'a pas fonctionné non plus. Merci!
Melissa Key
45

Comme la question et la réponse de user3490026 sont un succès de recherche, j'ai fait un exemple reproductible et une brève illustration des suggestions faites jusqu'à présent, ainsi qu'une solution qui répond explicitement à la question du PO.

L'une des choses qui ggplot2fait et qui peut être déroutante est qu'elle mélange automatiquement certaines légendes lorsqu'elles sont associées à la même variable. Par exemple, factor(gear)apparaît deux fois, une fois pour linetypeet une fois pourfill , ce qui donne une légende combinée. En revanche, geara sa propre entrée de légende car elle n'est pas traitée de la même manière que factor(gear). Les solutions proposées jusqu'à présent fonctionnent généralement bien. Mais parfois, vous devrez peut-être remplacer les guides. Voir mon dernier exemple en bas.

# reproducible example:
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

entrez la description de l'image ici

Supprimer toutes les légendes: @ user3490026

p + theme(legend.position = "none")

Supprimer toutes les légendes: @duhaime

p + guides(fill = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)

Désactiver les légendes: @Tjebo

ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs), show.legend = FALSE) +
geom_point(aes(shape = factor(cyl)), show.legend = FALSE) +
geom_line(aes(linetype = factor(gear)), show.legend = FALSE) +
geom_smooth(aes(fill = factor(gear), color = gear), show.legend = FALSE) + 
theme_bw() 

Supprimer le remplissage pour que le type de ligne devienne visible

p + guides(fill = FALSE)

Comme ci-dessus via la fonction scale_fill_:

p + scale_fill_discrete(guide = FALSE)

Et maintenant une réponse possible à la demande du PO

"pour conserver la légende d'un calque (lisse) et supprimer la légende de l'autre (point)"

Activer certains sur certains post-hoc ad hoc

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = FALSE, 
           shape = FALSE)  

entrez la description de l'image ici

PatrickT
la source
2
Je viens de remarquer que la couleur de remplissage bleue dans le dernier tracé n'apparaît pas sur le graphique,
je
Tapez warnings()après avoir exécuté votre code et vous verrez la ou les raisons pour lesquelles le ruban bleu ne s'affiche pas.
Markus
@markus: J'ai compris! Je ne prendrai pas la peine de modifier l'exemple, car le problème est distinct. Cependant, cela n'a pas de sens d'avoir une légende pour sequand elle n'est pas calculée. Ça vaut probablement un problème chez github, mais je n'ai pas l'énergie pour le moment ...
PatrickT
13

Si votre graphique utilise les deux fillet l' coloresthétique, vous pouvez supprimer la légende avec:

+ guides(fill=FALSE, color=FALSE)
duhaime
la source