2012-09-01 62 views
13

Tiene dificultades para configurar las escalas de color para los mapas en ggplot. Necesito escala de grises Muy agradecido por una idea en la que me estoy equivocando. También me pregunto si existe una forma más eficiente de obtener la variable de color en ggplot (es decir, que la adjunte a datos 'fortificados').Especificación de la escala de colores para los mapas en ggplot

library(ggplot2) 
states <- map_data("state") 
var <- data.frame(table(states$region)) # using rows as a dummy variable 
states$variable <- var$Freq[match(states$region,var$Var1)] 

map <- ggplot(states, aes(x=long, y=lat)) + 
    geom_polygon(aes(group=group, fill=variable), col=NA,lwd=0) 

map + scale_colour_gradient(low='white', high='grey20') 
map + scale_colour_grey() 

enter image description here

+1

Si es útil, tengo un paquete en proceso que hace mapas ggplot con una función, suponiendo que ya se han fortalecido los datos. Puede instalar por '' 'devtools :: install_github (" mapping "," jaredlander ")' ''. Aquí está la página de GitHub: https://github.com/jaredlander/mapping – Jared

Respuesta

10

Es necesario utilizar scale_fill_* y no scale_color_*. Para la geometría del polígono, el color de relleno de los polígonos está acoplado a la estética fill, no a la estética . En general, la función utilizada para cambiar los detalles de una escala en particular es scale_ aesthetic_name _ type_of_scale, p. scale_fill_gradient.

+2

Yo también lo pensé, pero obtengo 'Error: valor continuo suministrado a escala discreta' con eso. – A5C1D2H2I1M1N2O1R2T1

+2

Debe usar una escala continua, p. 'scale_fill_gradient'. –

3

Este código funciona para mí.

library(ggplot2) 
states <- map_data("state") 
var <- data.frame(table(states$region)) 
states$variable <- var$Freq[match(states$region,var$Var1)] 
map <- ggplot(states, aes(x=long, y=lat,fill=variable,group=group)) + geom_polygon() 
map + scale_fill_gradient(low='white', high='grey20') 

Una manera fácil de manejar los problemas con variables discretas es crear una paleta continua "falso" el uso de la función de la paleta de colores. Ver el siguiente ejemplo.

Definir paleta de colores, aquí he utilizado los códigos hexadecimales para blanco y negro, pero se puede utilizar cualquier color

gs.pal <- colorRampPalette(c("#FFFFFF","#000000"),bias=.1,space="rgb") 

Ahora crea algunos datos falsos

x <- rnorm(100) 
dat <- data.frame(cbind(x)) 
dat$fac <- as.factor(sort(rep(1:5,20))) 
dat$y <- x * as.numeric(dat$fac) 

siguiente trama con la función ggplot scale_* tipo _manual en este caso debido a su color en el que usaría scale_colour_manual pero arriba utilizaría scale_fill_manual

ggplot(dat,aes(x=x,y=y,colour=fac))+geom_point()+scale_colour_manual(values=gs.pal(5)) 
+0

Gracias @DistribEcology, consejo útil. – geotheory

+0

¿Qué sucede si usa la función 'scale_colour_brewer()'? – linello

Cuestiones relacionadas