簡體   English   中英

更改/添加空間邊界/多邊形形狀文件R

[英]Changing/adding spatial boundaries/polygon shapefile R

我正在處理包含所有省份的阿富汗shapefile。 我最終想通過區域命令繪制一些數據,每個區域包含幾個省(這就是我正在談論的內容: http : //en.wikipedia.org/wiki/File : Afghanistan_ISAF_Sept2008.jpg )。 我對在R中處理shapefile並不是很熟悉,但是在有關此問題的教程方面卻沒有發現太多。 是否可以重新繪制多邊形或覆蓋RC邊界並以這種方式繪制Choropleth? 謝謝。

像這樣嗎

碼:

library(rgdal)     # for readOGR(...)
library(ggplot2)   # for fortify(...) and rendering the map
setwd("<directory with all your files>")

regional.commands <- read.csv("regional.commands.csv")

map  <- readOGR(dsn=".", layer="afghanistan_province_boundaries_-_34_provinces")
data <- data.frame(id=rownames(map@data),Province=map@data$Prov34Na)
data <- merge(data,regional.commands,by="Province")
map.df <- fortify(map)
map.df <- merge(map.df,data,by="id", all.x=T)
map.df <- map.df[order(map.df$order),]

ggplot(map.df, aes(x=long,y=lat, group=group))+ 
  geom_polygon(aes(fill=RC))+
  geom_path(colour="grey70")+
  coord_fixed()

在此示例中, regional.commands.csv是由ISAF網站上的數據組裝而成的(手動!!!!)。 該文件只有兩列: ProvinceRC (區域命令)。 大概您已經有了類似的東西,但是並不需要共享它。 阿富汗shapefile是在這里獲得的。

說明

使用readOGR(...)將shapefile讀取到R中,創建一個“ SpatialPolygonsDataFrame”對象( map )。 該對象有兩個主要部分,一個多邊形部分(包含多邊形邊界的坐標)和一個數據部分,其中包含有關每個多邊形的信息(例如省名)。 可以使用map@data引用后者。

每個polgyon都有一個唯一的ID。 這些存儲在map@data的行名稱中。 因此,首先,我們從map@data的行名稱中創建具有列id的數據框data ,並從map@data的相關列(列Prov34Na )中創建一個Province列。

data <- data.frame(id=rownames(map@data),Province=map@data$Prov34Na)

如果您使用的阿富汗shapefile不同,則map@data的相應列可能會不同。

現在,我們將其與基於公共Province列的regional.commands數據框合並。

data <- merge(data,regional.commands,by="Province")

data現在有3列: ProvinceidRC (區域命令)。 需要注意的一件事是,顯然,國際安全援助部隊認為它最清楚如何拼寫阿富汗各省的名稱。 其中一些與地圖屬性表中的拼寫不符 因此,您可能需要再次手動修復此問題...

現在,我們使用fortify(...)map創建適合繪圖的數據map.dfmap.df )。 該數據框具有一個id列,因此我們將其與基於id data合並。

map.df <- merge(map.df,data,by="id", all.x=T)

最后,所有這些合並弄亂了行的順序,因此我們使用map.df的order列重新排序。

map.df <- map.df[order(map.df$order),]

剩下的只是生成圖層並渲染圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM