web-dev-qa-db-fra.com

Ajouter une légende au graphique geom_line () dans r

J'ai essayé d'ajouter une légende à mon ggplot, mais j'ai échoué lamentablement. J'ai essayé la fonction scale_colour_manual(), mais la légende ne s'affiche pas.

ggplot()+
geom_line(data=Summary,aes(y=Y1,x= X),colour="darkblue",size=1 )+
geom_line(data=Summary,aes(y=Y2,x= X),colour="red",size=1  )

Mon résumé de la base de données est le suivant:

  X           Y1           Y2
139 1.465477e+16 7.173075e+15
277 1.044803e+16 9.275002e+15
415 1.059258e+16 8.562518e+15
553 1.033283e+16 8.268984e+15
691 9.548019e+15 1.022248e+16
830 1.008212e+16 8.641891e+15
968 9.822061e+15 9.315856e+15
1106 9.948143e+15 9.178694e+15
1244 1.013922e+16 8.825904e+15
1382 9.815094e+15 9.283662e+15

Veuillez m'indiquer comment tracer Y1, Y2 par rapport à X sur le même graphique et ajouter une légende sur le côté.

15
ausworli

ggplot a besoin de aes pour créer une légende, déplacer colour à l'intérieur de aes(...) construira une légende automatiquement. alors nous pouvons ajuster les étiquettes de légende via scale_color_discrete:

ggplot()+
    geom_line(data=Summary,aes(y=Y1,x= X,colour="darkblue"),size=1 )+
    geom_line(data=Summary,aes(y=Y2,x= X,colour="red"),size=1) +
    scale_color_discrete(name = "Y series", labels = c("Y2", "Y1"))

enter image description here

22
Nate

Comme il a été dit, une couleur doit être spécifiée à l'intérieur d'une esthétique pour qu'il y ait une légende. Cependant, la couleur à l'intérieur de l'esthétique n'est en réalité qu'une étiquette qui se répercute ensuite sur d'autres couches. Vous pouvez définir des couleurs personnalisées avec scale_color_manual et l'étiquette de légende peuvent être corrigés avec labs.

ggplot(data=Summary)+
  geom_line(mapping=aes(y=Y1,x= X,color="Y1"),size=1 ) +
  geom_line(mapping=aes(y=Y2,x= X,color="Y2"),size=1) +
  scale_color_manual(values = c(
    'Y1' = 'darkblue',
    'Y2' = 'red')) +
  labs(color = 'Y series')
13
Adam

Pour fournir une réponse plus compacte qui utilise uniquement un seul appel geom:

ggplot2 aime beaucoup les longues données (paires clé-valeur) mieux que les larges (plusieurs colonnes). Cela nécessite que vous transformiez vos données avant de les représenter à l'aide d'un paquet tel que tidyr ou reshape2. De cette façon, vous pouvez avoir une variable indiquant la couleur, dans votre appel aes, qui produira la légende.

Pour vos données:

library(tidyr)
library(ggplot2)

plot_data <- gather(data, variable, value, -x)

ggplot(plot_data, aes(x = x, y = value, color = variable)) +
  geom_line() +
  scale_color_manual(values = c("firebrick", "dodgerblue")) 

Vous pouvez ensuite personnaliser la légende via scale_color série d’aides.

5
Jake Kaupp