web-dev-qa-db-fra.com

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")

La prochaine chose que je veux faire est de modifier le titre de la légende de cond en NEW LEGEND TITLE.

Donc ce que j'ai fait est d'ajouter simplement la ligne suivante, ajoutez 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?

enter image description here

198
neversaint

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 bien)

p + scale_fill_discrete(name = "New Legend Title")
262
Arun

Je ne me suis pas beaucoup intéressé à cela, mais parce que vous avez utilisé fill = cond in ggplot (), 

 + labs(color='NEW LEGEND TITLE') 

pourrait ne pas avoir fonctionné. Cependant si vous remplacezcolorparfill, ça marche!

+ labs(fill='NEW LEGEND TITLE') 

Cela a fonctionné pour moi dans ggplot2_2.1.0

P.S. J'aurais commenté, mais ma réputation de stackoverflow n'est pas suffisante pour commenter.

133
Rohan Sadale

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

Si oui, 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"))

enter image description here

35
user1317221_G

Étant donné que 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 "Remplir" dans la section Etiquette, à savoir +labs(fill="Title name"). Si vous utilisiez un type de tracé différent où le code était ggplot (data, color = 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 dans les tracés geom_bar mais cela ne semblait pas fonctionner pour geom_point.

12
kulianne

Il existe 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 le très joli fichier ggplot .

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

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

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

5
Yourpalal

Juste pour ajouter à la liste (les autres options ici ne fonctionnaient pas pour moi), vous pouvez également utiliser la fonction update_labels pour ggplot:

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

update_labels(p, list(colour="MY NEW LEGEND TITLE")

Cela vous permettra également de changer les étiquettes des axes x et y, avec des lignes séparées:

update_labels(p, list(x="NEW X LABEL",y="NEW Y LABEL")
2
user3791304

J'utilise un facet_wrap dans mon ggplot et aucune des solutions suggérées ne fonctionnait pour moi à l'exception de la solution d'ArnaudA:

qplot(…) + guides(color=guide_legend(title="sale year")) 
1
Birdonawire

Beaucoup de gens passent beaucoup de temps à changer les étiquettes, les étiquettes de légende, les titres et les noms des axes car ils ne savent pas qu'il est possible de charger des tables dans R contenant des espaces " ". Vous pouvez toutefois le faire pour gagner du temps ou réduire la taille de votre code, en spécifiant les séparateurs lorsque vous chargez une table, par exemple, délimitée par des tabulations (ou tout autre séparateur que celui par défaut ou un seul espace):

read.table(sep = '\t')

ou en utilisant les paramètres de chargement par défaut du format csv:

read.csv()

Cela signifie que vous pouvez directement conserver le nom "NEW LEGEND TITLE" en tant que nom de colonne (en-tête) dans votre fichier de données d'origine pour éviter de spécifier un nouveau titre de légende dans chaque tracé.

0
Nakx