2011-05-13 103 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