titre Contrôlez la légende de ggplot2 sans affecter l'intrigue



legend position r (1)

Je suis en train de tracer des lignes avec ggplot2 comme ceci:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + theme_bw()

.

Je trouve que les marques de légende sont petites donc je veux qu'elles soient plus grandes. Si je change la taille, les lignes sur l'intrigue changent aussi:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line(size=4) + theme_bw()

.

Mais je veux seulement voir des lignes épaisses dans la légende, je veux que les lignes sur l'intrigue soient minces. J'ai essayé d'utiliser legend.key.size mais cela change le carré de la marque, pas la largeur de la ligne:

library(grid)  # for unit
ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw() + theme(legend.key.size=unit(1,"cm"))

J'ai aussi essayé d'utiliser des points:

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + geom_point(size=4) + theme_bw()

Mais bien sûr, cela affecte encore l'intrigue et la légende:

Je voulais utiliser des lignes pour l'intrigue et des points / points pour la légende.

Donc, je pose deux questions:

  1. Comment changer la largeur de la ligne dans la légende sans changer l'intrigue?
  2. Comment dessiner des lignes dans l'intrigue, mais dessiner des points / points / carrés dans la légende?

Pour modifier la largeur de ligne uniquement dans la légende, vous devez utiliser la fonction guides() , puis colour= utiliser guide_legend() avec override.aes= et set size= . Cela remplacera la taille utilisée dans l'intrigue et utilisera une nouvelle valeur de taille juste pour la légende.

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+
       guides(colour = guide_legend(override.aes = list(size=3)))

Pour obtenir des points dans la légende et les lignes dans la solution de contournement, ajoutez geom_point(size=0) pour vous assurer que les points sont invisibles et ensuite dans guides() set linetype=0 pour supprimer les lignes et size=3 pour obtenir des points plus grands.

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+
       geom_point(size=0)+
       guides(colour = guide_legend(override.aes = list(size=3,linetype=0)))





legend