web-dev-qa-db-fra.com

Désactiver certaines légendes dans un ggplot

Supposons que j'ai un ggplot avec plus d'une légende.

mov <- subset(movies, length != "")
(p0 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point()
)

Je peux désactiver l'affichage de toutes les légendes comme celle-ci:

(p1 <- p0 + theme(legend.position = "none"))

Passer show_guide = FALSE à geom_point (selon cette question ) désactive la légende de la forme.

(p2 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point(show_guide = FALSE)
)

Mais que faire si je veux désactiver la légende des couleurs à la place? Il ne semble pas y avoir de moyen de dire à show_guide à quelle légende appliquer son comportement. Et il n'y a pas d'argument show_guide pour les échelles ou l'esthétique.

(p3 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  scale_colour_discrete(show_guide = FALSE) +
  geom_point()
)
# Error in discrete_scale

(p4 <- ggplot(mov, aes(year, rating, shape = mpaa)) +
  aes(colour = length, show_guide = FALSE) +
  geom_point()
)
#draws both legends

Cette question suggère que le moyen moderne (depuis ggplot2 v0.9.2) de contrôler les légendes est avec la fonction guides.

Je veux pouvoir faire quelque chose comme

p0 + guides(
  colour = guide_legend(show = FALSE) 
)

mais guide_legend n'a pas d'argument show.

Comment spécifier les légendes à afficher?

193
Richie Cotton

Vous pouvez utiliser guide=FALSE dans scale_..._...() pour supprimer la légende.

Pour votre exemple, vous devriez utiliser scale_colour_continuous() car length est une variable continue (non discrète).

(p3 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
   scale_colour_continuous(guide = FALSE) +
   geom_point()
)

Ou en utilisant la fonction guides(), vous devez définir FALSE pour cet élément/esthétique que vous ne souhaitez pas afficher en tant que légende, par exemple, fill, shape, colour.

p0 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point()    
p0+guides(colour=FALSE)

MISE À JOUR

Les deux solutions fournies fonctionnent dans le nouveau ggplot2 version 2.0.0 mais le jeu de données movies n'est plus présent dans cette bibliothèque. Au lieu de cela, vous devez utiliser le nouveau package ggplot2movies pour vérifier ces solutions.

library(ggplot2movies)
data(movies)
mov <- subset(movies, length != "")
261
Didzis Elferts

Vous pouvez simplement ajouter show.legend=FALSE à geom pour supprimer la légende correspondante.

14
fc9.30