2017-09-24 5 views
1

Le code ci-dessous trace un graphique dans lequel les noms des couleurs apparaissent dans la légende dans le bon ordre, mais les couleurs elles-mêmes apparaissent dans l'ordre inverse. Pourquoi?ggplot2: Pourquoi l'ordre des couleurs des graphiques geom_line() est-il inversé?

year <- 2000:2009 
a1 <- 4 + rnorm(10) 
a2 <- 3 + rnorm(10) 
a3 <- 2 + rnorm(10) 
a4 <- 0.25 * rnorm(10) 
vv <- tibble(year, a1, a2, a3, a4) 

test <- ggplot(data=vv) + aes(x=year) + 
    geom_line(aes(y = a1, colour= "blue")) + 
    geom_line(aes(y = a2, colour= "green")) + 
    geom_line(aes(y = a3, colour= "yellow")) + 
    geom_line(aes(y = a4, colour= "orange")) + 
    expand_limits(y=0) 

test 

Répondre

1

Je pense que vous pouvez déplacer colour de aes pour afficher les bonnes couleurs pour les lignes:

test <- ggplot(data=vv) + aes(x=year) + 
     geom_line(aes(y = a1), colour="blue") + 
     geom_line(aes(y = a2), colour="green") + 
     geom_line(aes(y = a3), colour="yellow") + 
     geom_line(aes(y = a4), colour="orange") + 
     expand_limits(y=0) 

Vous pouvez check this answer.

Le paramètre colour de aes ne définit pas directement la couleur de la ligne, mais la mappe la couleur sur les données en considérant la valeur définie en tant que facteur. Ainsi, lorsque vous définissez la valeur du colour sous la forme red, il attribue le nom red à la couleur de la ligne et l'affiche dans la légende comme suit. Il ne traite pas comme une couleur littérale. Mais en dehors de aes, il traite comme une couleur réelle. Vous pouvez également vérifier this answer.

1

Il y a quelques conseils pour mentionner ici. Tout d'abord, ggplot lit les couleurs nommées dans aes() comme des facteurs dans l'ordre alphabétique, par opposition aux noms de couleurs, ce qui les rend apparemment impropres à l'impression (et apparemment avec la mauvaise couleur) si vous ne faites pas la liste les couleurs dans cet ordre. Par exemple, le paquet ggplot2 interprétera et tracera "bleu", "vert", "jaune", "orange" comme "bleu", "vert", "orange", "jaune". En plus de ce changement d'ordre, il n'utilisera pas les valeurs que vous fournissez comme les couleurs à tracer; il utilise des couleurs par défaut.

Il y a plusieurs choses que vous pouvez faire pour résoudre ce problème. La première consiste à utiliser scale_colour_manual pour clarifier un ordre spécifique et la valeur de vos couleurs, comme ceci:

ggplot(data=vv) + aes(x=year) + 
    geom_line(aes(y = a1, colour= "blue")) + 
    geom_line(aes(y = a2, colour= "green")) + 
    geom_line(aes(y = a3, colour= "yellow")) + 
    geom_line(aes(y = a4, colour= "orange")) + 
    scale_colour_manual(values=c("blue"="blue","green"="green", 
           "yellow"="yellow","orange"="orange"), 
         breaks=c("blue","green","yellow","orange")) + 
    scale_x_continuous(breaks=seq(2000, 2009, 3)) + 
    expand_limits(y=0) 

Sortie:

enter image description here

Si vous n'avez pas besoin d'une légende, vous pouvez aussi il suffit de placer l'argument de couleur en dehors de aes(), comme l'explique @tekrei. Pour d'autres options de personnalisation, essayez? Scale_colour_manual pour plus d'aide.