2012-09-01 18 views
13

Trudności z ustawianiem skali kolorów dla map w ggplot. Potrzebuję skali szarości. Bardzo wdzięczny za pomysł, w którym idę źle. Zastanawiam się również, czy istnieje skuteczniejszy sposób na uzyskanie zmiennej koloru w ggplot (tj. Niż poprzez dołączenie jej do "wzmocnionych" danych)?Określanie skali kolorów dla map w 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

Jeśli to pomocne, mam paczkę w pracach, która tworzy mapy ggplot z jedną funkcją, zakładając, że już wzmocniłeś dane. Możesz zainstalować przez '' devtools :: install_github ("mapowanie", "jaredlander") '' '. Tutaj jest strona GitHub: https://github.com/jaredlander/mapping – Jared

Odpowiedz

10

Trzeba użyć scale_fill_* i nie scale_color_*. W przypadku geometrii wielokąta kolor wypełnienia wielokątów jest sprzężony z estetyką, a nie z estetyką . Zasadniczo, funkcją używaną do zmiany szczegółów konkretnej skali jest scale_ estetyczna_nazwa _ type_of_scale, np. scale_fill_gradient.

+2

Też tak pomyślałem, ale dostaję "Błąd: Ciągła wartość dostarczona do dyskretnej skali" z tym. – A5C1D2H2I1M1N2O1R2T1

+2

Musisz użyć skali ciągłej, np. 'scale_fill_gradient'. –

3

Ten kod działa dla mnie.

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

Łatwym sposobem radzenia sobie z problemami ze zmiennymi dyskretnymi jest stworzenie „fałszywego” ciągły paletę przy użyciu funkcji palety kolorów. Zobacz poniższy przykład.

Zdefiniuj paletę kolorów, tutaj stosowane kody hex na czarno-białe, ale można użyć dowolnych kolorów

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

Teraz utworzyć kilka fałszywych danych

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

Następny działka go z funkcji ggplot scale_* wpisz _manual w tym przypadku, ponieważ ma on kolor w używanym przez ciebie scale_colour_manual, ale powyżej użyjesz scale_fill_manual

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

Dzięki @DistribEcology, pożyteczna wskazówka. – geotheory

+0

Co, jeśli używasz funkcji 'scale_colour_brewer()'? – linello

Powiązane problemy