Je remarque qu'ici Boîte et moustaches tracent l'appel:
p + geom_boxplot(aes(fill = factor(cyl)))
génère des couleurs rouge/vert/bleu vif pour le remplissage des boîtes à moustaches, tandis que:
p + geom_boxplot(aes(fill = factor(vs)))
Génère un vert/rouge pâle distinct de couleurs. Dans mes données, j'obtiens le deuxième ensemble de couleurs, mais je voudrais le premier ensemble (comme dans
p + geom_boxplot(aes(fill = factor(cyl)))
qu'est-ce qui contrôle quel ensemble de couleurs ggplot utilise et comment pouvez-vous le changer?
Merci
Les couleurs par défaut sont des teintes régulièrement espacées autour de la roue chromatique. Vous pouvez vérifier comment cela est généré à partir de ici .
Vous pouvez utiliser scale_fill_manual
Avec ces couleurs:
p + scale_fill_manual(values=c("#F8766D", "#00BA38"))
Ici, j'ai utilisé ggplot_build(p)$data
de cyl
pour obtenir les couleurs.
Alternativement, vous pouvez également utiliser une autre palette:
p + scale_fill_brewer(palette="Set1")
Et pour trouver les couleurs dans la palette, vous pouvez faire:
require(RColorBrewer)
brewer.pal(9, "Set1")
Vérifiez l'emballage pour connaître les palettes et autres options, si vous êtes intéressé.
Edit: @ user248237dfsf, comme je l'ai déjà souligné dans le lien en haut, cette fonction de @Andrie montre les couleurs générées:
ggplotColours <- function(n=6, h=c(0, 360) +15){
if ((diff(h)%%360) < 1) h[2] <- h[2] - 360/n
hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65)
}
> ggplotColours(2)
# [1] "#F8766D" "#00BFC4"
> ggplotColours(3)
# [1] "#F8766D" "#00BA38" "#619CFF"
Si vous regardez les deux couleurs générées, la première est la même, mais la deuxième couleur n'est pas la même, lorsque n = 2 et n = 3. C'est parce qu'il génère des couleurs de teintes régulièrement espacées. Si vous souhaitez utiliser les couleurs pour cyl
pour vs
, vous devrez définir scale_fill_manual
Et utiliser ces couleurs générées avec n = 3 à partir de cette fonction.
Pour vérifier que c'est bien ce qui se passe, vous pouvez faire:
p1 <- ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_boxplot(aes(fill = factor(cyl)))
p2 <- ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_boxplot(aes(fill = factor(vs)))
Maintenant, si vous le faites:
ggplot_build(p1)$data[[1]]$fill
# [1] "#F8766D" "#00BA38" "#619CFF"
ggplot_build(p2)$data[[1]]$fill
# [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D"
Vous voyez que ce sont les couleurs qui sont générées à l'aide de ggplotColours
et la raison de la différence est également évidente. J'espère que ça aide.
Ajout aux réponses précédentes:
Lorsque vous utilisez l'esthétique col
(au lieu de fill
), utilisez scale_color_manual
. Ceci est utile pour geom_point()
:
myColors <- c("#56ddc5", "#ff3db7", "#4699dd")
ggplot(mtcars, aes(x=mpg, y=hp, col=as.factor(cyl))) +
geom_point() +
scale_color_manual(values=myColors)