2012-01-05 13 views
34

Aparentemente algo muy simple de hacer, pero tardé> 30min sin encontrar respuesta.ggplot2 orden inverso de scale_brewer

¿Cómo invierto el orden de los colores? Al mirar documentation for scale_brewer, calculé que puede ser formatter= argumento sospechoso. Pasé 'rev' y luego rev, pero no tienen ningún efecto (ningún mensaje de error, simplemente ignorado).

+0

La respuesta de pbaylis (set '' direction = -1'') parece ser la respuesta más simple a la pregunta en el título, pero la de joran o Josh da más control, por ej. pasando una secuencia arbitraria de colores, no solo la inversa. – PatrickT

Respuesta

39

creo que es probable que desee para seleccionar los colores que utilizan brewer.pal directamente y luego usar 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"))) 

A continuación, puede rev el orden de los colores allí.

A partir de la versión 2.0,0 de ggplot ahora hay una forma más directa de hacerlo, vea la respuesta de @pbaylis a continuación.

+2

+1 - Esto es bueno. También podría ser bueno "conectar" el número de colores necesarios, como este: 'rev (brewer.pal (n = length (unique (mtcars $ cyl))," BuPu "))'. –

+0

... o 'scale_fill_manual', cualquiera que sea el paradigma más apropiado para su geom. –

+0

Siéntase libre de actualizar su respuesta con el código que publiqué y eliminaré la mía para mayor claridad. – pbaylis

11

Si no desea ensuciar alrededor directamente con RColorBrewer (un paquete encantador), puede revertir los niveles del factor en el hoja.de.datos original, y luego graficar que:

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)) 

Y Si desea imprimir la llave en el mismo orden que antes de la reversión, simplemente hacer esto:

d + scale_colour_brewer(breaks = rev(levels(dsamp$clarity))) 
18

esto no va a ayudar con el problema de la OP - lo sé. Para escalas discretas como scale_..._brewer(), hacer scale_..._manual(values = rev(colorsYouHad)) es la respuesta correcta.

Sin embargo, para continuas escalas, sólo tiene que pasar:

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

por ejemplo, por el equivalente continuo de scale_..._brewer():

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

+0

Agradezco el deseo de alertar a los usuarios sobre una forma ahora más simple de hacer lo mismo, pero dado que ambas respuestas _ funcionan_, una editar llamando a una respuesta diferente, la respuesta "correcta" es inapropiada. Soy bastante receptivo a los comentarios sobre mis respuestas. Un simple comentario diciéndome que mi respuesta está desactualizada es suficiente. – joran

+0

Esta es una respuesta agradable, simple, funcionó para mí, gracias! – RobertMc

+0

Tenga en cuenta que al usar 'trans =" ​​reverse "', también cambia el orden de los valores.Para escalas continuas, esto significa que los valores de la leyenda _decrementarán_ hacia arriba – Lennert

27

La versión CRAN de ggplot2 ahora permite a los usuarios especificar direction=-1 en scale_brewer para invertir la col ors. Lo siguiente produce la misma trama que la respuesta aceptada.

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