64 votes

Comment puis-je supprimer le titre de la légende dans ggplot2 ?

J'ai une question concernant la légende dans ggplot2.

Disons que j'ai un ensemble de données hypothétique sur la longueur moyenne des carottes pour deux couleurs différentes dans deux fermes :

carrots<-NULL
carrots$Farm<-rep(c("X","Y"),2)
carrots$Type<-rep(c("Orange","Purple"),each=2)
carrots$MeanLength<-c(10,6,4,2)
carrots<-data.frame(carrots)

Je fais un simple graphique à barres :

require(ggplot2)
p<-ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
geom_bar(position="dodge") +
opts(legend.position="top")
p

Ma question est la suivante : existe-t-il un moyen de supprimer le titre ('Type') de la légende ?

Merci !

0 votes

58voto

Tom B. Points 581

J'ai trouvé que la meilleure option est d'utiliser + theme(legend.title = element_blank()) comme l'a noté l'utilisateur "gkcn".

En ce qui me concerne (le 26/03/15), j'ai utilisé la méthode suggérée précédemment. labs(fill="") y scale_fill_discrete("") supprimer un titre, pour ensuite ajouter une autre légende, ce qui n'est pas utile.

0 votes

La meilleure réponse, car name = "" met juste un espace blanc et scale_manual est plus une réponse générale.

0 votes

Cela a marché pour moi. Les autres ne l'ont pas fait parce qu'ils ont ajouté une légende supplémentaire.

53voto

Andrie Points 66979

Vous pouvez modifier le titre de la légende en le passant comme premier paramètre à une échelle. Par exemple :

ggplot(carrots, aes(y=MeanLength, x=Farm, fill=Type)) + 
  geom_bar(position="dodge") +
  theme(legend.position="top", legend.direction="horizontal") +
  scale_fill_discrete("")

Il existe également un raccourci pour cela, à savoir labs(fill="")

Comme votre légende se trouve en haut du graphique, vous pouvez également modifier l'orientation de la légende. Vous pouvez le faire en utilisant opts(legend.direction="horizontal") .

enter image description here

0 votes

Merci @Andrie, cela a parfaitement fonctionné. Il est intéressant que vous ayez mentionné legend.direction="horizontal". Je voulais le faire, mais cela ne fonctionnait pas dans l'ancienne version de R que j'utilisais sur mon vieil ordinateur portable (R 2.11.1, honte à moi), mais la fonctionnalité semble fonctionner dans R 2.13.1 !

9 votes

En utilisant NULL au lieu de "" n'essaye pas de dessiner le titre du tout, sinon il y a un peu trop d'espace là où le titre devrait être quand la boîte de légende est visible.

29voto

rcs Points 22112

Vous pouvez utiliser labs :

p + labs(fill="")

plot example

1 votes

Il y aura un espace blanc là où se trouvait le titre. Utilisez la réponse de Yuriy si vous ne voulez pas d'espace blanc.

25voto

Yuriy Petrovskiy Points 1362

Le seul moyen qui a fonctionné pour moi était d'utiliser legend.title = theme_blank() et je pense que c'est la variante la plus pratique par rapport à labs(fill="") y scale_fill_discrete("") qui pourrait également être utile dans certains cas.

ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
geom_bar(position="dodge") +
opts(
    legend.position="top",
    legend.direction="horizontal",
    legend.title = theme_blank()
)

P.S. Il y a des options plus utiles dans documentation .

26 votes

Opts() et theme_blank sont obsolètes maintenant. Utilisez : "+ theme(legend.title = element_blank())" à la place.

4 votes

En utilisant legend.title = element.blank() plutôt que les options qui définissent une chaîne vide, il n'y a pas d'espace blanc supplémentaire au-dessus de la légende à l'endroit où se trouvait le titre de la légende.

7voto

Chase Points 27342

Vous avez déjà deux bonnes options, alors en voici une autre qui utilise scale_fill_manual() . Notez que cela vous permet également de spécifier facilement les couleurs des barres :

ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
  geom_bar(position="dodge") +
  opts(legend.position="top") +
  scale_fill_manual(name = "", values = c("Orange" = "orange", "Purple" = "purple"))

Si vous utilisez la version la plus récente (janvier 2015) de ggplot2 (version 1.0), la procédure suivante devrait fonctionner :

ggplot(carrots, aes(y = MeanLength, x = Farm, fill = Type)) +
  geom_bar(stat = "identity", position = "dodge") +
  theme(legend.position="top") +
  scale_fill_manual(name = "", values = c("Orange" = "orange", "Purple" = "purple"))

0 votes

Merci, @Chase. Non seulement ça a marché, mais c'est aussi la plus belle combinaison de couleurs que j'aie jamais vue :)

0 votes

+1 : Il s'agit d'une option importante car lorsque l'on utilise plusieurs échelles (par ex. scale_fill_manual , scale_color_manual , scale_shape_manual ), ils ont besoin des mêmes name ou plusieurs légendes apparaîtront.

0 votes

@Chase, est-ce que cela remplacera le titre par une chaîne vide d'une hauteur non nulle, créant ainsi un espace vertical en haut de la boîte de légende (lorsqu'il y en a une) ou est-ce que cela se comportera comme suit theme(legend.title = element_blank()) et engloutir la ligne ? Sur mon non-mwe, on dirait qu'il y a un espace supplémentaire, mais il pourrait y avoir autre chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X