110 votes

Contrôler l'épaisseur de la bordure du point de contrôle dans ggplot

Lors de l'utilisation de ggplot, je peux définir shape sur 21-25 pour obtenir des formes ayant un réglage indépendant pour les couleurs internes (fill) et les bordures (col), comme ceci:

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)

entrer la description de l'image ici

Cependant, je n'arrive pas à contrôler l'épaisseur des bordures des formes, que ce soit en les définissant absolument ou en tant que mappage esthétique. Je note que si je définis une valeur lwd, elle remplace l'esthétique taille:

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

entrer la description de l'image ici

Comment contrôler l'épaisseur des bordures?

154voto

Noam Ross Points 865

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

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

Ainsi, la solution correcte à cela 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

19voto

Simon O'Hanlon Points 27680

Il se sent un peu bricolé mais vous pouvez ajouter un ensemble de points "arrière-plan" avec la taille définie sur la cartographie esthétique plus une petite constante pour 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 arrêter son affichage 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)

description de l'image

1voto

Gopal Penny Points 57

Une autre solution consiste à créer le graphique en R, puis à l'exporter dans un fichier .svg. L'épaisseur de ligne 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X