Comment puis-je changer le titre d'une légende dans ggplot2? [fermé]

58

J'ai créé un tracé dans ggplot2 pour résumer les données provenant d'un ensemble de données 2 x 4 x 3 cellules. J'ai pu créer des panneaux pour la variable à 2 niveaux en utilisant facet_grid(. ~ Age)et définir les axes x et y avec aes(x=4leveledVariable, y=DV). J'avais l'habitude aes(group=3leveledvariable, lty=3leveledvariable)de produire l'intrigue jusqu'à présent. Cela me donne une visualisation qui est encadrée par la variable à 2 niveaux, l’axe des X représentant la variable à 4 niveaux et des lignes différentes tracées dans les panneaux pour la variable à 3 niveaux. Mais la clé de la variable à 3 niveaux est intitulée avec le nom de la variable à 3 niveaux et je veux que ce soit un titre comportant un espace de caractère. Comment puis-je renommer le titre de la légende?

Ce que j'ai essayé ne semble pas fonctionner (où se abptrouve mon objet ggplot2):

 abp <- abp + opts(legend.title="Town Name")
 abp <- abp + scale_fill_continuous("Town Name")
 abp <- abp + opts(group="Town Name")
 abp <- abp + opts(legend.title="Town Name")

Exemple de données:

ex.data <- data.frame(DV=rnorm(2*4*3), V2=rep(1:2,each=4*3), V4=rep(1:4,each=3), V3=1:3)
russellpierce
la source
2
@drknexus - si vous pouvez partager vos données, cela peut être utile ou vous pouvez pointer vers un jeu de données similaire dans R ayant la même forme que vos données.
Chase
1
Tout le monde ici semble très compétent, mais je sais que pour les questions relatives à ggplot, je trouve leur groupe Google extrêmement utile. groups.google.com/group/ggplot2
Dason
Outre l'excellente documentation bien connue sur la page de Hadley, la référence non connue sur Git Hub aide vraiment à résoudre ce type de problèmes.
hans0l0
Sinon, theme_get()vous fournit la même référence dans la console.
Brandon Bertelsen
1
En réponse à plusieurs drapeaux demandant la migration de SO, c'est en fait impossible; voyez pourquoi sur SO.meta: meta.stackexchange.com/q/8004/150510 , meta.stackexchange.com/q/151890/150510 .
chl

Réponses:

25

Une autre option est d'utiliser

p + labs(aesthetic='custom text')     

Par exemple, l'exemple de Chase ressemblerait à ceci:

library(ggplot2)

ex.data <- data.frame(DV=rnorm(2*4*3),V2=rep(1:2,each=4*3),V4=rep(1:4,each=3),V3=1:3)
p <- qplot(V4, DV, data=ex.data, geom="line", group=V3, linetype=factor(V3)) + facet_grid(. ~ V2)
p + labs(linetype='custom title')

et donner le chiffre: entrez la description de l'image ici

utilisateur116293
la source
De nos jours, je suis enclin à préférer utiliser labs () pour modifier les étiquettes plutôt que de les spécifier échelle / axe par échelle / axe.
russellpierce
38

Vous pouvez changer le titre de la légende en modifiant l'échelle de cette légende. Voici un exemple utilisant le jeu de données CO2

library(ggplot2)

p <- qplot(conc, uptake, data = CO2, colour = Type) + scale_colour_discrete(name = "Fancy Title")
p <- p + facet_grid(. ~ Treatment)
p 

MODIFIER:

En utilisant les exemples de données ci-dessus, voici une solution pratique. Je pense que cela imite l'intrigue que @drknexus essaie de créer. En remarque, si quelqu'un peut expliquer pourquoi nous devons considérer la V3 comme un facteur permettant de l'associer à la légende, je l'apprécierais beaucoup.

p <- qplot(V4, DV, data = ex.data, geom = "line", group = V3, lty = factor(V3)) 
p <- p + scale_linetype_discrete(name = "Fancy Title") + facet_grid(. ~ V2)
p 

texte alternatif

Chasse
la source
Je pense que ce qui me manque, c'est une fonction comme scale_color_discrete qui est liée à la spécification "group" ou "lty" dans ggplot (data = ex.daata, aes (x = V4, y = DV, groupe = V3, lty = V3 ))
russellpierce
1
Ah je l'ai trouvé: scale_linetype_discrete (name = "bob")
russellpierce
@Chase: Editez avec le bit scale_linetype_discrete et j'accepterai votre réponse.
russellpierce
1
@drknexus - le problème qui se pose dans mon exemple de travail est la commande appropriée scale_colour_discrete()et le code sur lequel vous travaillez est évidemment un peu différent. Je ne sais pas ce que ce code est ...
Chase
3
@Chase Re: "pourquoi nous devons traiter la V3 en tant que facteur" scale_linetype_discreteattend une variable avec des valeurs discrètes (facteur ou caractère, à partir de plyr::is.discrete), consultez le code src sur Github, j.mp/ejaRRT . Belle réponse (+1).
chl