web-dev-qa-db-fra.com

Epaisseur de la bordure du point de contrôle dans ggplot

Lorsque j'utilise ggplot, je peux définir shape sur 21-25 pour obtenir des formes ayant des paramètres indépendants pour les couleurs internes (fill) et bordures (col), comme suit:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21)

enter image description here

Cependant, je n'arrive pas à comprendre comment contrôler l'épaisseur des contours de la forme, soit en les définissant de manière absolue, soit en tant que mappage esthétique. Je remarque que si je définis une valeur lwd, elle remplace l’esthétique size:

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21, lwd=2)

enter image description here

Comment contrôler l'épaisseur de la bordure?

63
Noam Ross

À partir de la version 2.0.0 de ggplot2 , il existe un argument pour contrôler l'épaisseur de la bordure du point. Du NEWS.md fichier:

geom_point () obtient une esthétique du trait qui contrôle la largeur de bordure des formes 21-25 (# 1133, @SeySayux). la taille et la course sont additives, donc un point de taille = 5 et de course = 5 aura un diamètre de 10mm. (# 1142)

Ainsi, la solution correcte à ceci est maintenant:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21, stroke = 2)

Output

70
Noam Ross

Cela semble un peu compliqué mais vous pouvez ajouter un ensemble de "arrière-plan" avec la taille définie pour le mappage esthétique plus une petite constante à agrandir la bordure des points. Jouez avec la constante pour obtenir la largeur de bordure souhaitée.

Vous devrez également désactiver la légende de taille pour empêcher l'affichage de la légende sur le graphique ...

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(size=id+0.5), colour="black" , show_guide = FALSE )+
  scale_size( guide = "none" )+
  geom_point(aes(fill=id, size=id), colour="black", shape=21)

enter image description here

14
Simon O'Hanlon

Une autre solution consiste à créer le tracé dans R, puis à l'exporter dans un fichier .svg. La largeur de raie peut ensuite être modifiée à l'aide d'un logiciel d'édition de graphiques vectoriels (par exemple, Inkscape). Cette méthode est particulièrement utile lorsque les points de données se chevauchent.

2
Gopal Penny