Modification des étiquettes de légende (texte) dans ggplot

120

J'ai passé des heures à chercher dans la documentation et sur StackOverflow, mais aucune solution ne semble résoudre mon problème. Lors de l'utilisation, ggplotje ne parviens pas à obtenir le bon texte dans la légende, même s'il se trouve dans mon cadre de données. J'ai essayé scale_colour_manual, scale_fill_manualavec des valeurs différentes pour labels=telles que c("T999", "T888")", "cols".

Voici mon code:

T999 <- runif(10, 100, 200)
T888 <- runif(10, 200, 300)
TY <- runif(10, 20, 30)
df <- data.frame(T999, T888, TY)


ggplot(data = df, aes(x=T999, y=TY, pointtype="T999")) + 
       geom_point(size = 15, colour = "darkblue") + 
       geom_point(data = df, aes(x=T888, y=TY), colour = 'red', size = 10 ) + 
       theme(axis.text.x = element_text(size = 20), axis.title.x =element_text(size = 20),   axis.text.y = element_text(size = 20)) +
       xlab("Txxx") + ylab("TY [°C]") + labs(title="temperatures", size = 15) + 
       scale_colour_manual(labels = c("T999", "T888"), values = c("darkblue", "red")) +    theme(legend.position="topright")

Une aide serait très appréciée!

user3633161
la source
8
Jetez un œil à ce didacticiel pour savoir avec quel format de données ggplotest le plus satisfait (long, pas large) et pour avoir une idée de la différence entre le mappage d' une aesthétique à une variable dans l' aesappel, et la définir à l'extérieur aes. Vous avez besoin de meltvos données dans un format long et de mapper colour(ou fill) dans aesla variable appropriée.
Henrik

Réponses:

146

Le didacticiel @Henrik mentionné est une excellente ressource pour apprendre à créer des graphiques avec le ggplot2package.

Un exemple avec vos données:

# transforming the data from wide to long
library(reshape2)
dfm <- melt(df, id = "TY")

# creating a scatterplot
ggplot(data = dfm, aes(x = TY, y = value, color = variable)) + 
  geom_point(size=5) +
  labs(title = "Temperatures\n", x = "TY [°C]", y = "Txxx", color = "Legend Title\n") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  theme(axis.text.x = element_text(size = 14), axis.title.x = element_text(size = 16),
        axis.text.y = element_text(size = 14), axis.title.y = element_text(size = 16),
        plot.title = element_text(size = 20, face = "bold", color = "darkgreen"))

cela se traduit par:

entrez la description de l'image ici

Comme mentionné par @ user2739472 dans les commentaires: Si vous souhaitez uniquement modifier les étiquettes de texte de la légende et non les couleurs de la palette par défaut de ggplot, vous pouvez utiliser à la scale_color_hue(labels = c("T999", "T888"))place de scale_color_manual().

Jaap
la source
@Sathish Comme vous pouvez le voir, le titre de l'axe des y est plus petit que le titre de l'axe des x. Les différentes tailles sont utilisées pour illustrer les possibilités et ses conséquences. Ainsi, le code utilisé dans la réponse est correct imo.
Jaap
@Sathish Ajout à mon commentaire précédent: c'est certainement une option pour le faire de cette façon! Tout dépend de ce que vous voulez réaliser ;-)
Jaap
9
Si vous souhaitez uniquement modifier les étiquettes de texte de la légende et non les couleurs de la palette par défaut de ggplot, vous pouvez utiliser à la scale_color_hue(labels = c("T999", "T888"))place descale_color_manual()
user2739472
1
@ user2739472 Thx & true. Je l'ajouterai à ma réponse.
Jaap
@Sathish J'ai un peu tardé, mais j'ai corrigé la faute de frappe maintenant :-)
Jaap
41

Les titres de légende peuvent être étiquetés par une esthétique spécifique .

Ceci peut être réalisé en utilisant les fonctions guides()ou labs()de ggplot2(plus ici et ici ). Il vous permet d'ajouter des propriétés de guide / légende à l'aide du mappage esthétique.

Voici un exemple utilisant l' mtcarsensemble de données et labs():

ggplot(mtcars, aes(x=mpg, y=disp, size=hp, col=as.factor(cyl), shape=as.factor(gear))) +
  geom_point() +
  labs(x="miles per gallon", y="displacement", size="horsepower", 
       col="# of cylinders", shape="# of gears")

entrez la description de l'image ici

Répondre à la question du PO en utilisant guides():

# transforming the data from wide to long
require(reshape2)
dfm <- melt(df, id="TY")

# creating a scatterplot
ggplot(data = dfm, aes(x=TY, y=value, color=variable)) + 
  geom_point(size=5) +
  labs(title="Temperatures\n", x="TY [°C]", y="Txxx") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  guides(color=guide_legend("my title"))  # add guide properties by aesthetic

entrez la description de l'image ici

Megatron
la source
Je ne suis pas d'accord là-dessus. Lorsque vous ne spécifiez que le titre, il est plus facile de le spécifier dans les arguments scale_ ..ou labs.
Jaap
Je commentais votre solution d'il y a 15 minutes qui a ajouté le titre scale_color_manual(title="...", ...). Je vois que vous l'avez modifié pour faire référence à l'esthétique de la couleur labs(). J'offre ma solution comme alternative.
Megatron
À partir de maintenant, cela semble modifier la légende s'il s'agit d'un dégradé de remplissage pour être plus absurde.
Max Candocia