supprimer le titre de la légende dans ggplot

111

J'essaye de supprimer le titre d'une légende dans ggplot2:

df <- data.frame(
  g = rep(letters[1:2], 5),
  x = rnorm(10),
  y = rnorm(10)
)

library(ggplot2)
ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom")

entrez la description de l'image ici

J'ai vu cette question et aucune des solutions ne semble fonctionner pour moi. La plupart donnent une erreur sur la façon dont optsest obsolète et à utiliser à la themeplace. J'ai aussi essayé différentes versions theme(legend.title=NULL), theme(legend.title=""), theme(legend.title=element_blank), etc. messages d'erreur typiques sont:

'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1)
'theme_blank' is deprecated. Use 'element_blank' instead. (Deprecated; last used in version 0.9.1)

J'utilise ggplot2pour la première fois depuis la sortie de la version 0.9.3 et j'ai du mal à naviguer dans certaines des modifications ...

smillig
la source
5
Vous pouvez utiliser labs()pour cela: Ajoutez la ligne labs(colour = "")à votre code qui a produit le graphique ci-dessus.
Dennis

Réponses:

191

Vous y étiez presque: il suffit d'ajouter theme(legend.title=element_blank())

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  theme(legend.title=element_blank())

Cette page sur Cookbook for R donne de nombreux détails sur la personnalisation des légendes.

Juba
la source
2
Cela supprimera tous les titres de légende. Pour plus de contrôle local, la guide = guide_legend()commande fonctionne. Pour supprimer le titre de la légende de remplissage, mais pour conserver le titre de la légende des couleurs, par exemplescale_fill_brewer(palette = "Dark2", guide = guide_legend(title = NULL)) + scale_color_manual(values = c("blue", "white", "red"))
PatrickT
9

Cela fonctionne aussi et montre également comment changer le titre de la légende:

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  scale_color_discrete(name="")
Roland
la source
7
Cela remplace le titre par une chaîne vide et crée donc un espace supplémentaire entre l'étiquette et la boîte de légende, qui ne serait visible que si la légende avait une boîte ou un arrière-plan d'une couleur différente de l'endroit où il est positionné. Donc, c'est bien pour une approche rapide et prête dans des cas simples comme theme_bw()mais pas les meilleurs dans les cas où la légende a une boîte autour d'elle et est positionnée quelque part sur la zone de tracé (mon approche habituelle).
PatrickT
1
+1 pour l'observation. J'ai eu le problème en utilisant deux légendes différentes et l'espace blanc entre elles qui a été créé par la solution ci-dessus. Le réglage scale_color_manual(name=element_blank())+pour la légende inférieure l'a résolu pour moi
joaoal
@joaoal, element_blank()semble être l'approche recommandée. Le réglage name = NULL est une autre façon.
PatrickT
1

Une autre option utilisant labset définissant la couleur sur NULL.

ggplot(df, aes(x, y, colour = g)) +
  geom_line(stat = "identity") +
  theme(legend.position = "bottom") +
  labs(colour = NULL)

entrez la description de l'image ici

mpalanco
la source
0

Pour Error: 'opts' is deprecated. Utilisez theme()plutôt. (Défunt; utilisé pour la dernière fois dans la version 0.9.1) 'J'ai remplacé opts(title = "Boxplot - Candidate's Tweet Scores")par labs(title = "Boxplot - Candidate's Tweet Scores"). Ça a marché!

Shradha Shiwani
la source
0

Étant donné que vous pouvez avoir plus d'une légende dans un tracé, un moyen de supprimer sélectivement un seul des titres sans laisser d'espace vide consiste à définir l' nameargument de la scale_fonction sur NULL, c.- à -d.

scale_fill_discrete(name = NULL)

(bravo à @pascal pour un commentaire sur un autre fil )

vkehayas
la source