2014-02-22 60 views
1

我一直試圖在R中繪製基於縣的Choropleth地圖,用於可視化我亞利桑那州的數據集。R中的空間繪圖:如何根據要顯示的數據繪製多邊形和顏色

利用從arizona.edu(空間庫)和數據,爲全縣多邊形基礎數據繪製專題地圖是從az.gov

它有密謀縣以下polygon-

library(maptools) 
library(rgdal) 
library(ggplot2) 
library(plyr) 
county <- readShapePoly(file.choose()) 
[email protected]$id <- rownames([email protected]) 
county.points <- fortify(county, coords="id") 
county.df <- join(county.points, [email protected], by="id") 
ggplot(county.df) + aes(long,lat,group=group, fill="id") + 
geom_polygon() + 
geom_path(color="white") + 
coord_equal() + 
scale_fill_brewer("County Arizona") 

此代碼不給我任何錯誤,也沒有輸出。

形文件我源here

數據源here

+0

嘗試用更換您ggplot代碼:'ggplot(county.df,AES(長,LAT組=組,請填寫= ID))+ geom_polygon ()+ geom_path(color =「white」)+ coord_fixed()'我希望你意識到這只是用多邊形ID填充顏色的多邊形。 – jlhoward

+0

只是一個澄清的問題:你的「數據源」在2012年在亞利桑那州的縣通過婚姻。您是否試圖根據2012年在該縣有多少婚姻的情況,創建一個以縣爲單位的全州地圖? – jlhoward

+0

@jihoward - 是的,你說得對。我正在做同樣的事 – yashgarg1232

回答

5

我不能爲什麼你的代碼是不產生輸出說話 - 有太多可能的原因 - 但是這是你所想實現?

代碼

library(rgdal) 
library(ggplot2) 
library(plyr) 
library(RColorBrewer) 
setwd("< directory with all your files >") 

map  <- readOGR(dsn=".",layer="ALRIS_tigcounty") 
marriages <- read.csv("marriages.2012.csv",header=T,skip=3) 
marriages <- marriages[2:16,] 
marriages$County <- tolower(gsub(" ","",marriages$County)) 
marriages$Total <- as.numeric(as.character(marriages$Total)) 

data <- data.frame(id=rownames([email protected]), [email protected]$NAME, stringsAsFactors=F) 
data <- merge(data,marriages,by.x="NAME",by.y="County",all.x=T) 
map.df <- fortify(map) 
map.df <- join(map.df,data, by="id") 

ggplot(map.df, aes(x=long, y=lat, group=group))+ 
    geom_polygon(aes(fill=Total))+ 
    geom_path(colour="grey50")+ 
    scale_fill_gradientn("2012 Marriages", 
         colours=rev(brewer.pal(8,"Spectral")), 
         trans="log", 
         breaks=c(100,300,1000,3000,10000))+ 
    theme(axis.text=element_blank(), 
     axis.ticks=element_blank(), 
     axis.title=element_blank())+ 
    coord_fixed() 

說明

要生成等值線圖,最終我們需要與您感興趣的基準多邊形(結婚總數由縣級)相關聯。這是三個步驟:首先,我們的多邊形ID與縣名關聯:

data <- data.frame(id=rownames([email protected]), [email protected]$NAME, stringsAsFactors=F) 

然後,我們用總的婚姻縣名關聯:

data <- merge(data,marriages,by.x="NAME",by.y="County",all.x=T) 

然後我們與多邊形的結果相關聯的座標數據:

map.df <- join(map.df,data, by="id") 

您的具體情況有很多潛在的陷阱:

  1. 您提供的鏈接是pdf - 完全沒用。但是稍微戳了一下,發現有相同數據的Excel file。即使這個文件需要清理:數據有「,」分隔符,需要關閉,並且一些單元格有腳註,必須將其刪除。最後,我們必須保存爲csv文件。
  2. 由於我們在縣名匹配,名稱必須匹配!在shape文件屬性表,縣名均爲小寫,並且空格都被移除(例如,「聖克魯斯」是「聖克魯茲」因此,我們需要小寫縣名和刪除空格:

    marriages$County <- tolower(gsub(" ","",marriages$County))

  3. 的總計列進來作爲一個因素,其具有被轉換成數字:

    marriages$Total <- as.numeric(as.character(marriages$Total))

  4. 你的實際數據是高度傾斜:馬里科帕縣有23600次婚姻,格林利有50個。所以使用線性色階不是很有用。因此,我們採用對數:

    scale_fill_gradientn("2012 Marriages", colours=rev(brewer.pal(8,"Spectral")), trans="log", breaks=c(100,300,1000,3000,10000))+

+0

感謝您的詳細解答,主要問題是評論的事情。我感謝你的努力。 – yashgarg1232