2012-09-01 21 views
13

Difficoltà a impostare le scale di colori per le mappe in ggplot. Ho bisogno di scala di grigi. Molto grato per un'idea in cui ho sbagliato. Mi chiedo anche se esista un modo più efficiente di ottenere la variabile del colore in ggplot (ad esempio, collegandola ai dati "fortificati")?Specificare la scala di colori per le mappe in 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

Se è utile, ho un pacchetto in esecuzione che rende le mappe ggplot con una funzione, presupponendo che i dati siano già stati rafforzati. Puoi installare da '' 'devtools :: install_github (" mapping "," jaredlander ")' ''. Ecco la pagina GitHub: https://github.com/jaredlander/mapping – Jared

risposta

10

è necessario utilizzare scale_fill_* e non scale_color_*. Per la geometria del poligono il colore di riempimento dei poligoni è accoppiato all'estetica fill, non all'estetica color. In generale, la funzione utilizzata per modificare i dettagli di una particolare scala è scale_ nome_estetico _ tipo_of_scale, ad es. scale_fill_gradient.

+2

L'ho pensato anch'io, ma sto ottenendo "Errore: valore continuo fornito su scala discreta" con quello. – A5C1D2H2I1M1N2O1R2T1

+2

È necessario utilizzare una scala continua, ad es. 'Scale_fill_gradient'. –

3

Questo codice funziona per me.

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

Un modo semplice per gestire i problemi con variabili discrete è quello di creare un "falso" tavolozza continuo utilizzando la funzione di tavolozza dei colori. Vedi l'esempio di seguito.

Definire tavolozza di colori, qui ho usato i codici esadecimali in bianco e nero ma è possibile utilizzare tutti i colori

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

Ora creare alcuni dati falsi

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

successiva trama con la funzione ggplot scale_* tipo _manual in questo caso dal suo colore in cui si utilizza scale_colour_manual ma in precedenza si utilizza scale_fill_manual

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

Grazie a @DistribEcology, suggerimento utile. – geotheory

+0

Cosa succede se si utilizza la funzione 'scale_colour_brewer()'? – linello

Problemi correlati