web-dev-qa-db-fra.com

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

Je trace des lignes avec ggplot2 comme ceci:

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

current plot.

Je trouve que les marques de légende sont petites, donc je veux qu'elles soient plus grandes. Si je modifie la taille, les lignes du tracé changent également:

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

thick plot lines.

Mais je veux seulement voir des lignes épaisses dans la légende, je veux que les lignes de l'intrigue soient fines. 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"))

big legend keys

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 à la fois l'intrigue et la légende:

points

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

Je pose donc deux questions:

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

Pour modifier la largeur de ligne uniquement dans la légende, vous devez utiliser la fonction guides() puis pour colour= Utiliser guide_legend() avec override.aes= Et définir size=. Cela remplacera la taille utilisée dans le tracé 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)))

enter image description here

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

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)))

enter image description here

100
Didzis Elferts