2012-09-01 20 views
13

Schwierigkeiten beim Festlegen der Farbskalen für Karten in ggplot. Ich brauche Graustufen. Sehr dankbar für eine Idee, wo ich falsch liege. Ich frage mich auch, ob es einen effizienteren Weg gibt, die Farbvariable in ggplot zu bekommen (d. H., Indem man sie an "verstärkte" Daten anfügt)?Angeben der Farbskala für Karten 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

Wenn es hilfreich ist, habe ich ein Paket in der Arbeit, die ggplot Karten mit einer Funktion macht, vorausgesetzt, Sie haben bereits die Daten verstärkt. Sie können mit '' 'devtools :: install_github (" mapping "," jaredlander ")' '' installieren. Hier ist die GitHub-Seite: https://github.com/jaredlander/mapping – Jared

Antwort

10

Sie benötigen scale_color_*scale_fill_* und nicht zu verwenden. Für die Polygongeometrie ist die Füllfarbe der Polygone mit der fill Ästhetik verbunden, nicht mit der color Ästhetik. Im Allgemeinen ist die Funktion, die zum Ändern der Details eines bestimmten Maßstabs verwendet wird, scale_ ästhetischer_name _ type_of_scale, z. scale_fill_gradient.

+2

Ich dachte es auch, aber ich bekomme 'Fehler: Kontinuierlicher Wert, der diskrete Skala geliefert wird' damit. – A5C1D2H2I1M1N2O1R2T1

+2

Sie müssen eine kontinuierliche Skala verwenden, z. 'scale_fill_gradient'. –

3

Dieser Code funktioniert für mich.

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

Eine einfache Möglichkeit, Probleme mit diskreten Variablen zu behandeln, besteht darin, mit der Farbpalettenfunktion eine "falsche" kontinuierliche Palette zu erstellen. Siehe das folgende Beispiel.

Farbpalette definieren, hier habe ich die Hex-Codes für Schwarz verwendet und weiß, aber Sie Farben

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

Erstellen Sie nun einige gefälschte Daten

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

Nächstes Grundstück mit der ggplot Funktion verwenden können scale_* Geben Sie _manual in diesem Fall seit seiner Farbe in Sie würden scale_colour_manual verwenden, aber oben würden Sie scale_fill_manual

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

Dank @DistribEcology, nützlicher Tipp. – geotheory

+0

Was ist, wenn Sie die Funktion 'scale_colour_brewer()' verwenden? – linello

Verwandte Themen