web-dev-qa-db-fra.com

Supprimer la légende ggplot 2.2

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

Edit : Cette question et ses réponses étant populaires, un exemple reproductible semble en 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() 

enter image description here

209
Guy

de r cookbook , où bp est votre ggplot:

Supprimer la légende pour 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")
395
user3490026

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

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

Vous pouvez spécifier le paramètre show.legendaprès l'appel aes:

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

alors la légende correspondante devrait disparaître

69
Tjebo

Comme la question et la réponse de user3490026 constituent un succès de recherche important, j’en ai donné un exemple reproductible et une brève illustration des suggestions qui ont été faites jusqu’à présent. avec une solution qui répond explicitement à la question du PO.

Une des choses que ggplot2 fait et qui peut être déroutante est qu’elle mélange automatiquement certaines légendes quand elles sont associées à la même variable. Par exemple, factor(gear) apparaît deux fois, une fois pour linetype et une fois pour fill, ce qui donne une légende combinée. En revanche, gear possède 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() 

enter image description here

Supprime toutes les légendes: @ user3490026

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

Supprimez 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 afin 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

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

Activez certains post-hoc ad hoc

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

enter image description here

27
PatrickT

Si votre graphique utilise à la fois l'esthétique fill et color, vous pouvez supprimer la légende avec:

+ guides(fill=FALSE, color=FALSE)
13
duhaime