2 votes

Légende personnalisée ggplot2 combinant forme et remplissage

J'essaie de combiner fill y color dans une légende ggplot2. Comme il existe plusieurs couleurs pour la x axe, il semble logique que ggplot2 ne sache pas quelle couleur choisir dans la légende.

Par exemple :

library(ggplot2)
ggplot(mpg, aes(fl, hwy)) +
    geom_point(aes(color = fl, shape = factor(year), fill = fl)) +
    scale_shape_manual(values = c("circle filled", "circle open"))

enter image description here

Mon objectif serait de modifier manuellement le factor(year) légende pour ressembler à ceci :

enter image description here

J'ai joué autour de la guides() sans succès.

Editar :
Valeurs pour shape peut être trouvé en exécutant vignette("ggplot2-specs") .

1voto

mischva11 Points 2058

Vous aviez déjà la réponse presque correcte avec le scale_shape_manual . Mais d'une certaine manière, l'argument du "cercle rempli" est invalide. Comme je ne sais pas où trouver ces valeurs, j'ai pris les valeurs d'un tableau d'une question similaire. (source) : enter image description here

donc avec les valeurs 20 et 79 vous pouvez obtenir le résultat souhaité.

ggplot(mpg, aes(fl, hwy)) +
  geom_point(aes(color = fl, shape = factor(year), fill = fl)) +
  scale_shape_manual(values = c(16,79))

sortie : enter image description here

0voto

Algebreaker Points 108

Ok, voici donc un moyen très détourné de le faire ressembler à l'image ci-dessus. Peut-être que quelqu'un d'autre pourra proposer une version plus intuitive :

ggplot(mpg, aes(fl, hwy)) +
  geom_point(aes(color = fl, shape = factor(year), fill = factor(year))) +
  scale_shape_manual(values = c(16,79), guide = FALSE)  +
  scale_fill_manual("Year", values=c("grey","white"))+
                    guides(fill = guide_legend(override.aes = list(shape = c(21,21),
                                                color = c("black", "black"))))

Sortie : enter image description here

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