2011-05-13 140 views
9

我使用地图库和ggplot的geom_polygon创建地图。我只是想改变默认的蓝色,红色,紫色配色方案。我对ggplot非常陌生,所以请原谅,如果我只是没有使用正确的数据类型。下面是我使用的数据是什么模样:在R中更改ggplot geom_polygon的颜色方案

> 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 

下面的代码:

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

我尝试了以下多:

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

回答

16

的问题是,你正在使用色阶,但在绘图中使用填充美学。您可以使用scale_fill_gradient()两种颜色和scale_fill_gradient2()三种颜色:

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

我是越来越有问题scale_fill_brewer()抱怨时,离散变量,预计提供一个连续变量。一个简单的解决方法是创建与cut()分离箱,然后使用它作为填充美学:

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

谢谢!像魅力一样工作。 – tcash21 2011-05-14 21:28:46