web-dev-qa-db-fra.com

ggplot2 inverse l'ordre de scale_brewer

Apparemment, une chose très simple à faire, mais cela m'a pris> 30 minutes sans trouver de réponse.

Comment inverser l'ordre des couleurs? En regardant documentation pour scale_brewer , je me suis dit que ça pouvait être formatter= argument suspect. J'ai réussi 'rev' puis rev, mais ils n'ont aucun effet (pas de message d'erreur, juste ignoré).

53
yosukesabai

Je pense que vous souhaitez probablement sélectionner les couleurs à l'aide de brewer.pal directement, puis utilisez scale_colour_manual:

ggplot(mtcars,aes(x = mpg, y = disp)) + 
    geom_point(aes(colour = factor(cyl))) + 
    scale_colour_manual(values = rev(brewer.pal(3,"BuPu")))

Ensuite, vous pouvez rev l'ordre des couleurs là-bas.

Depuis la version 2.0,0 de ggplot, il existe désormais un moyen plus direct de le faire, voir la réponse de @pbaylis ci-dessous.

53
joran

La version CRAN de ggplot2 permet désormais aux utilisateurs de spécifier direction=-1 in scale_brewer pour inverser les couleurs. Ce qui suit produit le même tracé que la réponse acceptée.

ggplot(mtcars,aes(x = mpg, y = disp)) + 
  geom_point(aes(colour = factor(cyl))) + 
  scale_colour_brewer(palette="BuPu", direction=-1)
49
pbaylis

Cela n'aidera pas le problème du PO - je sais. Pour des échelles discrètes comme scale_..._brewer(), faire scale_..._manual(values = rev(colorsYouHad)) est la bonne réponse.

Néanmoins, pour les échelles continues, vous pouvez simplement passer:

scale_..._...(..., trans = "reverse")

par exemple, pour l'équivalent continu de scale_..._brewer():

scale_..._distiller("My Scale", palette = "Spectral", trans = "reverse")

23
Antoine Lizée

Si vous ne voulez pas fouiner directement avec RColorBrewer (un joli paquet), vous pouvez inverser les niveaux du facteur dans le data.frame d'origine, puis le tracer:

dsamp <- diamonds[sample(nrow(diamonds), 1000), ] 

# Reverse the levels of the factor associated with color, here 'clarity'
# (Might be safer to assign this to a new column named, e.g., 'clarity2')
levels(dsamp$clarity) <- rev(levels(dsamp$clarity))

d <- qplot(carat, price, data = dsamp, colour = clarity)
d + scale_colour_brewer(breaks = levels(dsamp$clarity))

Et si vous souhaitez imprimer la clé dans le même ordre qu'avant l'inversion, procédez comme suit:

d + scale_colour_brewer(breaks = rev(levels(dsamp$clarity)))
11
Josh O'Brien

Je sais, très tard pour la fête. Mais j'ai rencontré ce problème il y a quelque temps et j'ai utilisé la solution ci-dessus. Je suis actuellement en train de passer par r4ds par Hadley Wickham et il y a une solution ridiculement facile, alors j'ai pensé la publier. Change ça:

ggplot(mtcars,aes(x = mpg, y = disp)) + 
geom_point(aes(colour = factor(cyl)))

pour ça:

ggplot(mtcars,aes(x = mpg, y = disp)) + 
geom_point(aes(colour = factor(-cyl))) #note the minus symbol
4
dj20b22