Je voudrais placer une bordure noire autour des points d’un nuage de points qui sont remplis en fonction des données, en utilisant ggplot2. Aussi, je voudrais éviter d’avoir une entrée de légende pour la bordure noire car elle sera sur chaque point. Fondamentalement, je cherche cette plot, mais avec une bordure noire autour de chaque point.
df <- data.frame(id=runif(12), x=1:12, y=runif(12)) ggplot(df, aes(x=x, y=y))+geom_point(aes(colour=id), size=12)
En bonus, j’aimerais ne pas avoir de légende pour la bordure noire. Mon meilleur essai est:
df <- data.frame(id=runif(12), x=1:12, y=runif(12)) ggplot(df, aes(x=x, y=y))+geom_point(aes(fill=id, colour="black"), size=12)
Qui donne:
Je ne comprends pas pourquoi cela ne me donne pas ce que je veux, et pire (pour mes études en ggplot2) Je ne comprends pas pourquoi il ne semble pas y avoir de couleur de remplissage! De l’aide?
Peut-être que si je peux obtenir le contour et remplir le mappage correctement, je peux utiliser un hack comme celui de la dernière série de chiffres ici pour désactiver la légende.
C’est un peu obscur, mais vous devez utiliser pch
> 20 (je pense que 21:25 sont les formes pertinentes): fill
contrôle la colour
intérieure (u) et la colour
contrôle la ligne autour du bord.
(g0 <- ggplot(df, aes(x=x, y=y))+geom_point(aes(fill=id), colour="black",pch=21, size=5))
update : avec les versions récentes de ggplot2 (par exemple, 2.0.0, je ne sais pas à quel point ça marche), le guide par défaut est une barre de couleurs. Besoin de g0 + guides(fill="legend")
pour obtenir une légende avec des points comme dans le tracé montré ici. Les ruptures par défaut ont également changé: pour répliquer exactement ce graphe, vous avez besoin de g0 + scale_fill_continuous(guide="legend",breaks=seq(0.2,0.8,by=0.1))
...
Relatif mais pas identique: comment créer un tracé avec des points personnalisés en R? . La réponse acceptée à cette question utilise la technique de stratification indiquée dans la réponse de @ joran, mais (OMI) la réponse de @jbaums, qui utilise la technique pch=21
, est supérieure. (Je pense que la shape=21
est une alternative, et peut-être même préférable, à pch=21
).
PS, vous devriez mettre de la colour
dehors du mapping ( aes
bit) si vous voulez le définir absolument et non pas en fonction de la valeur de certaines variables ...
La première question est un gimme:
ggplot(df, aes(x=x, y=y)) + geom_point(aes(colour=id), size=12) + geom_point(shape = 1,size = 12,colour = "black")
Et, oh, vous ne voulez pas une légende supplémentaire. Je pense que ça le fait alors:
J’avais le même problème, mais j’avais aussi besoin d’une solution qui permette la gigue. Pour cela, vous devez utiliser un pch qui est une forme remplie avec une bordure et une fonction grid.edit du paquet gridExtra. En utilisant votre exemple:
df <- data.frame(id=runif(12), x=1:12, y=runif(12)) ggplot(df, aes(x=x, y=y, fill=id))+geom_point(pch=21, colour="Black", size=12) library(gridExtra) grid.edit("geom_point.points", grep = TRUE, gp = gpar(lwd = 3))