2011-05-13 5 views
9

Je crée une carte en utilisant la bibliothèque de cartes et geom_polygon de ggplot. Je voudrais simplement changer le modèle de couleur bleu, rouge, violet par défaut à quelque chose d'autre. Je suis extrêmement nouveau à ggplot alors s'il vous plaît pardonnez si je n'utilise pas les bons types de données. Voici ce que les données que je utilise ressemble:Modifier le schéma de couleurs pour ggplot geom_polygon dans R

> head(m) 
region  long  lat group order subregion Group.1 debt.to.income.ratio.mean ratio total 
17 alabama -87.46201 30.38968  1  1  <NA> alabama     12.4059 20.51282 39 
18 alabama -87.48493 30.37249  1  2  <NA> alabama     12.4059 20.51282 39 
19 alabama -87.52503 30.37249  1  3  <NA> alabama     12.4059 20.51282 39 
20 alabama -87.53076 30.33239  1  4  <NA> alabama     12.4059 20.51282 39 
21 alabama -87.57087 30.32665  1  5  <NA> alabama     12.4059 20.51282 39 
22 alabama -87.58806 30.32665  1  6  <NA> alabama     12.4059 20.51282 39 

> head(v) 
      Group.1 debt.to.income.ratio.mean ratio  region total 
alabama  alabama     12.40590 20.51282 alabama 39 
alaska   alaska     11.05333 33.33333  alaska  6 
arizona  arizona     11.62867 25.55556 arizona 90 
arkansas  arkansas     11.90300 5.00000 arkansas 20 
california california     11.00183 32.59587 california 678 
colorado  colorado     11.55424 30.43478 colorado 92 

Voici le code:

library(ggplot2) 
library(maps) 

states <- map_data("state") 
m <- merge(states, v, by="region") 
m <- m[order(m$order),] 

p<-qplot(long, lat, data=m, group=group, fill=ratio, geom="polygon") 

J'ai essayé le ci-dessous et plus:

cols <- c("8" = "red","4" = "blue","6" = "darkgreen", "10" = "orange") 
p + scale_colour_manual(values = cols) 
p + scale_colour_brewer(palette="Set1") 
p + scale_color_manual(values=c("#CC6666", "#9999CC")) 

Répondre

16

Le problème est que vous utilisent une échelle de couleurs, mais utilisent l'esthétique de remplissage dans l'intrigue. Vous pouvez utiliser scale_fill_gradient() pour deux couleurs et scale_fill_gradient2() pour trois couleurs:

p + scale_fill_gradient(low = "pink", high = "green") #UGLY COLORS!!! 

Je recevais des problèmes avec scale_fill_brewer() se plaindre d'une variable continue fournie lorsqu'une variable discrète était attendue. Une solution facile est de créer des corbeilles discrètes avec cut() et ensuite l'utiliser comme esthétique de remplissage:

m$breaks <- cut(m$ratio, 5) #Change to number of bins you want 

p <- qplot(long, lat, data = m, group = group, fill = breaks, geom = "polygon") 
p + scale_fill_brewer(palette = "Blues") 
+0

Merci! Travaillé comme un charme. – tcash21

Questions connexes