2016-10-18 34 views
1

我正在使用公開的美國人口普查地名錄數據文件(zcta5)。我使用的版本的文件名爲tl_2015_us_zcta510.shp,dbf ...繪製文件工作正常。R spplot標籤錯誤位置

我遇到的問題似乎發生在SpatialDataPolygonsDataFrame與更多數量的多邊形子集。但是,當我使用一個小的子集標籤工作正常。

我需要的標籤標識分配給各個5位多邊形區域所屬的郵政編碼分組。例如 - 對於Ashtabula,俄亥俄州郵政編碼,我需要所有郵政編碼在其中間標有「503」的標籤。我爲所有其他俄亥俄州郵政編碼分組標記了標籤 - 稱爲「PostalGroupNumber」,並以表格形式表示數據全部檢查爲正確。

所以我加載庫和閱讀完整的空間數據幀到存儲器:

library(sp) 
library(maps) 
library(mapdata) 
library(maptools) 
library(foreign) 

#Load in the entire census gazatteer data file 
zcta5=readShapeSpatial("~/R/PostalCodes/USA/US Postal Codes/ZCTA5/tl_2015_us_zcta510.shp") 

下一頁:創建阿什塔比拉的矢量,OH郵政編碼:

ashtab.zips <- c("44003","44004","44005","44010","44030","44032","44041","44047","44048","44068","44076","44082","44084","44085","44088","44093","44099") 

下一個 - 子集zcta5空間數據幀僅包括這些郵政編碼:

ashtab <- zcta5[which([email protected]$GEOID10 %in% ashtab.zips),] 

下一步 - 將標籤添加到新的ashtab空間da TA框架和情節:

[email protected] <- cbind([email protected], "PostalGroupNumber"="503") 
l1 = list("sp.text", coordinates(ashtab), as.character([email protected]$PostalGroupNumber),col="black", cex=0.7,font=2) 
spplot(ashtab,zcol="GEOID10", sp.layout=list(l1) 
     ,main=list(label="PostalGroupNumber 503 Postal Areas",cex=2,font=1) 
) 

其中在它們與正確的標籤的工作原理並給出了東北地區的郵政領域的下列正確情節俄亥俄州:

enter image description here

還不錯 - 但是 - 規模在右邊看起來它保留了大量的GEOID10級別,我只希望ashtab.zips矢量中的17個子集。方面的問題(額外的信用; - ) - 爲什麼這些水平仍然存在?

現在談談主要問題。俄亥俄州的郵政編碼全部以43 ...或44 ...開頭 - 我有一個csv文件,用於在俄亥俄州的5位數字代碼,每個代碼都分配了PostalGroupNumber,我將其讀入數據框中,清理並使用像我上面那樣給子集的主要數據幀:

oh <- read.csv("~/R/PostalCodes/OhioPostalGroupings/OH-PGAs-PostalCodes Only.csv", header = TRUE, stringsAsFactors = FALSE, colClasses = c("character", "character", "character")) 
oh$ZIP_CODE <- trimws(oh$ZIP_CODE) 
ohzcta5 <- zcta5[which([email protected]$GEOID10 %in% oh$ZIP_CODE),] 
l1 = list("sp.text", coordinates(ohzcta5), as.character([email protected]$GEOID10),col="black", cex=0.7,font=2) 

spplot(ohzcta5,zcol="GEOID10", sp.layout=list(l1) 
     ,main=list(label="Ohio Postal Code - PostalGroupNumbers",cex=2,font=1) 
) 

這個時候 - 正好與GEOID10值的標籤繪製,看它是否正確的情節和它 - 這裏很難,但在顯示正確的縮放閱讀在每個多邊形郵政編碼(這是不是一個偉大的形象,但OH的形狀是正確的,標籤是正確的......):

enter image description here

現在我需要將PostalGroupNumber標籤添加到空間數據框中,並將所有組郵編代碼顏色組合爲一組,使每個組的顏色相同。所以阿什塔比拉應該都是一種顏色,而它們都具有「503」的標籤 - 但他們不這樣做:

[email protected] <- merge([email protected], oh, by.x="GEOID10", by.y="ZIP_CODE", all.x=TRUE) 
[email protected] <- cbind([email protected], "TAcolor"=as.factor([email protected]$PostalGroupNumber)) 
l1 = list("sp.text", coordinates(ohzcta5), as.character([email protected]$PostalGroupNumber),col="black", cex=0.7,font=2) 

spplot(ohzcta5,zcol="GEOID10", sp.layout=list(l1) 
     ,main=list(label="Ohio Postal Code - PostalGroupNumber",cex=2,font=1) 
) 

現在看起來是這樣的:

enter image description here

在阿什塔比拉細看(東北角)現在看起來像這樣 - 標籤發生了什麼?:

enter image description here

標籤都是錯誤的 - 但檢查ohzcta5 @數據時PostalGroupNumber是正確的GEOID10記錄。

幫助!!!!沒頭緒。

回答

0

對兩個問題的回答: 1)通過對空間數據框中的每個因素使用基本包「水滴」來解決在spplot尺度上出現的空間框架中保留的太多水平的問題。

2)不要使用「合併」,因爲它重新排序數據,因此它不再與正確的多邊形對齊。相反,使用本文所示的「匹配」https://stackoverflow.com/a/3652472/4017087(謝謝Ramnath!)

+0

感謝您解決自己的問題!一般情況下,建議直接分配@data插槽,除非您知道自己在做什麼,因爲您確定的原因。 package'sp'有一個空間對象的merge方法,你也可以嘗試。 –