web-dev-qa-db-fra.com

ggplot legends - changer les étiquettes, l'ordre et le titre

J'ai beaucoup de mal à modifier la légende de mon intrigue. Voici un exemple reproductible:

dtt <- structure(list(model = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("ma", "mb", "mc"), class = "factor"), year = c(2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L), V = c(0.16, 0.14, 0.11, 0.13, 0.15, 0.16, 0.24, 0.17, 0.12, 0.13, 0.15, 0.15, 0.2, 0.16, 0.11, 0.12, 0.12, 0.15), lower = c(0.11, 0.11, 0.07, 0.09, 0.11, 0.12, 0.16, 0.12, 0.04, 0.09, 0.09, 0.11, 0.14, 0.1, 0.07, 0.08, 0.05, 0.1), upper = c(0.21, 0.19, 0.17, 0.17, 0.19, 0.2, 0.29, 0.23, 0.16, 0.17, 0.16, 0.2, 0.26, 0.27, 0.15, 0.16, 0.15, 0.19)), .Names = c("model", "year", "V", "lower", "upper"), class = "data.frame", row.names = c(NA, -18L))

Mon intrigue est générée comme ceci:

ggplot(dtt, aes(x=year, y=V, group = model, colour = model, ymin = lower, ymax = upper)) +
    geom_ribbon(alpha = 0.35, linetype=0)+ 
    geom_line(aes(linetype=model), size = 1.5) +       
    geom_point(aes(shape=model), fill = "white", size = 4)  +      
    theme(legend.position=c(.6,0.8)) +
    theme(legend.background = element_rect(colour = 'black', fill = 'grey90', size = 1, linetype='solid'))

ce qui produit ceci: enter image description here

Maintenant, ce que je voudrais faire, c'est

  1. changer le titre de la légende
  2. changer l'ordre dans lequel les éléments de légende apparaissent
  3. changer le texte des éléments de légende.

J'ai tripoté pendant des heures à essayer de le faire, mais sans grand succès. Le mieux que j'ai réussi jusqu'à présent est d'ajouter ceci:

scale_colour_hue(name = "Model 1",
    breaks=c("mb", "ma", "mc"),
    labels=c("MBB", "MAA", "MCC"))

Mais il produit cette abomination: enter image description here

Comme vous le voyez, il y a maintenant une légende supplémentaire inutile, et les formes de la légende ne correspondent pas à celles de l'intrigue!

Enfin, je voudrais des graphiques dans la légende pour indiquer que les lignes bleues et vertes sont pointillées, pas pleines - mais je n'ai aucune idée de comment faire cela.

Toute aide serait très appréciée,

38
Joe King

Vous devez faire deux choses:

  1. Renommer et réorganiser les niveaux de facteur avant le tracé
  2. Renommez le titre de chaque légende au même titre

Le code:

dtt$model <- factor(dtt$model, levels=c("mb", "ma", "mc"), labels=c("MBB", "MAA", "MCC"))

library(ggplot2)
ggplot(dtt, aes(x=year, y=V, group = model, colour = model, ymin = lower, ymax = upper)) +
  geom_ribbon(alpha = 0.35, linetype=0)+ 
  geom_line(aes(linetype=model), size = 1) +       
  geom_point(aes(shape=model), size=4)  +      
  theme(legend.position=c(.6,0.8)) +
  theme(legend.background = element_rect(colour = 'black', fill = 'grey90', size = 1, linetype='solid')) +
  scale_linetype_discrete("Model 1") +
  scale_shape_discrete("Model 1") +
  scale_colour_discrete("Model 1")

enter image description here

Cependant, je pense que c'est vraiment moche et difficile à interpréter. Il est préférable d'utiliser des facettes:

ggplot(dtt, aes(x=year, y=V, group = model, colour = model, ymin = lower, ymax = upper)) +
  geom_ribbon(alpha=0.2, colour=NA)+ 
  geom_line() +       
  geom_point()  +      
  facet_wrap(~model)

enter image description here

62
Andrie