Comment changer le titre de la légende dans ggplot

J'ai l'intrigue suivante comme ci-dessous. Il a été créé avec cette commande:

library(ggplot2)

df <- data.frame(cond = factor(rep(c("A", "B"), each = 200)), 
                 rating = c(rnorm(200), rnorm(200, mean=.8)))

ggplot(df, aes(x=rating, fill=cond)) + 
geom_density(alpha = .3) +
xlab("NEW RATING TITLE") +
ylab("NEW DENSITY TITLE")

Maintenant, la prochaine chose que je veux faire est de modifier le titre de légende à partir de cond dans NOUVEAU TITRE de LÉGENDE.

Donc, ce que j'ai fait est d'ajouter simplement la ligne suivante ajouter la fin du code ci-dessus:

+labs(colour="NEW LEGEND TITLE")

Mais ça ne marche pas. Quelle est la bonne façon de le faire?

entrez la description de l'image ici

168
demandé sur romles 2013-01-31 13:31:10

8 réponses

Cela devrait fonctionner:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
p <- p + guides(fill=guide_legend(title="New Legend Title"))

(ou alternativement)

p + scale_fill_discrete(name = "New Legend Title")
221
répondu Arun 2013-01-31 09:35:43

Je n'ai pas beaucoup creusé dans cela mais parce que vous avez utilisé fill = cond dans ggplot (),

 + labs(color='NEW LEGEND TITLE') 

Pourrait ne pas avoir fonctionné. Cependant, il vous remplacer couleur par remplir, il fonctionne!

+ labs(fill='NEW LEGEND TITLE') 

Cela a fonctionné pour moi dans ggplot2_2. 1. 0

PS j'aurais commenté mais ma réputation de stackoverflow ne suffit pas à commenter.

107
répondu Rohan Sadale 2016-08-14 03:04:40

Puisque vous avez deux densités, j'imagine que vous voudrez peut-être définir vos propres couleurs avec scale_fill_manual.

Si c'est le cas, vous pouvez faire:

df <- data.frame(x=1:10,group=c(rep("a",5),rep("b",5)))

legend_title <- "OMG My Title"

ggplot(df, aes(x=x, fill=group)) + geom_density(alpha=.3) +   
    scale_fill_manual(legend_title,values=c("orange","red"))

entrez la description de l'image ici

29
répondu user1317221_G 2013-01-31 09:39:55

Puisque dans votre code vous avez utilisé ggplot(data, fill= cond) pour créer l'histogramme, vous devez ajouter le titre de la légende en utilisant également "fill" dans la section label, c'est-à-dire +labs(fill="Title name"). Si vous utilisiez un type de tracé différent où le code était ggplot (data, colour = cond), vous pouvez utiliser +labs(colour= "Title Name"). En résumé, l'argument lab doit correspondre à l'argument AES.

J'ai utilisé + guides(fill=guide_legend("my awesome title")) pour changer le titre de la légende sur les tracés geom_bar mais cela ne semblait pas fonctionner pour geom_point.

9
répondu kulianne 2017-08-16 15:48:14

Aucun des codes ci-dessus n'a fonctionné pour moi.

Voici ce que j'ai trouvé et ça a marché.

labs(color = "sale year")

, Vous pouvez aussi donner un espace entre le titre et l'affichage en ajoutant \n à la fin.

labs(color = 'sale year\n")

3
répondu Rohit Yadav 2018-07-25 15:54:46

Il y a une autre réponse très simple qui peut fonctionner pour certains graphiques simples.

Ajoutez simplement un appel à guide_legend () dans votre graphique.

ggplot(...) + ... + guide_legend(title="my awesome title")

Comme le montre la très belle ggplot docs .

Si cela ne fonctionne pas, vous pouvez ajuster plus précisément vos paramètres de guidage avec un appel à guides:

ggplot(...) + ... + guides(fill=guide_legend("my awesome title"))

Vous pouvez également varier la forme / couleur / taille en spécifiant ces paramètres pour votre appel à guides.

2
répondu Yourpalal 2017-07-24 15:59:22

J'utilise un facet_wrap dans mon ggplot et aucune des solutions suggérées n'a fonctionné pour moi sauf la solution D'ArnaudA:

qplot(…) + guides(color=guide_legend(title="sale year")) 
1
répondu Birdonawire 2017-09-20 11:24:52

Vous pouvez aussi ajouter une seule ligne (dernière ligne):

ggplot(df, aes(x=rating, fill=cond)) + 
  geom_density(alpha = .3) +
  xlab("NEW RATING TITLE") +
  ylab("NEW DENSITY TITLE") +
  labs(fill = "Your Title")
-1
répondu FOG 2018-03-21 19:43:25