2013-06-12 32 views
4

你好,stackoverflow社區!使用shp文件的R等值線圖

請問有人請幫助我,因爲我在創建R中的等值線圖時遇到了一些困難。截至目前,我已經將LL信息分配給了我的興趣點,並且現在我想要創建一個等值線圖在高中學區(highdist_n83.shp.zip)中,數據集(data.csv)中的「cans」變量。我想請知道的是如何正確填寫地圖區域的罐頭總和。我提供了代碼,它從保存箱中提取示例數據文件以及我想要使用的形狀文件。

編輯 對不起,我忘了補充一點,當我繪製形狀文件時,我能夠看到它通過ggplot呈現。然而,當我嘗試用「cans」變量的數量「填充」區域時,R在渲染看起來像是原始形狀的線條之前掛起一段時間。我不知道錯誤是由於以下原因可能

  1. 形狀文件不好
  2. 有可能是我如何合併數據幀和形狀文件的問題,因爲我已經注意到了額外的行被添加到合併文件
  3. 有一個地區有多個學校,在使用ddply時我沒有合併。

謝謝你的時間!

###load R scripts from dropbox 
dropbox.eval <- function(x, noeval=F) { 
require(RCurl) 
intext <- getURL(paste0("https://dl.dropboxusercontent.com/",x), ssl.verifypeer = FALSE) 
intext <- gsub("\r","", intext) 
if (!noeval) eval(parse(text = intext), envir= .GlobalEnv) 
return(intext) 
} 

##pull scripts from dropbox 
dropbox.eval("s/wgb3vtd9qfc9br9/pkg.load.r")  
dropbox.eval("s/tf4ni48hf6oh2ou/dropbox.r") 

##load packages 
pkg.load(c(ggplot2,plyr,gdata,sp,maptools,rgdal,reshape2)) 

###setup data frames 
dl_from_dropbox("data.csv","dx3qrcexmi9kagx") 
    data<-read.csv(file='data.csv',header=TRUE) 

###prepare GIS shape and data for plotting 
dropbox.eval("s/y2jsx3dditjucxu/dlshape.r")  
temp <- tempfile() 
dlshape(shploc="http://files.hawaii.gov/dbedt/op/gis/data/highdist_n83.shp.zip", temp) 
shape<- readOGR(".","highdist_n83") #HDOE high school districts 
[email protected] 

shape2<- spTransform(shape, CRS("+proj=longlat +datum=NAD83")) 

data.2<-ddply(data, .(year, schoolcode, longitude, latitude,NAME,HDist,SDist), summarise, 
     total = sum(total), 
     cans= sum(cans)) 

coordinates(data.2) <-~longitude + latitude 
shape2.df<-fortify(shape2) 
mshape2.df<- merge(shape2.df,[email protected], by.x="id", by.y="ID",all=TRUE) 

newdata <- merge(mshape2.df,data.2, by.x="NAME", by.y="NAME", all=TRUE) 
newdata <- newdata [order(newdata $order),] 

###choropleth map: 
mapPlot <- ggplot(newdata,aes(x=long, y=lat,drop=FALSE)) + 
geom_polygon(aes(fill=cans, drop=FALSE), colour = "black", lwd = 1/9,na.rm=FALSE) 
+ ggtitle("Total of Cans Across State") 
print(mapPlot) 
+3

謝謝你的代碼。在我們開始之前,您能具體告訴我們問題是什麼和/或包含截圖。你是否收到警告信息,或者不是情節劇情或情節錯誤?等等等 – SlowLearner

+0

嗨SlowLearner。我編輯了我的原始信息來描述我遇到的問題。這是相當長的,但我希望它可以清理我需要幫助的東西。在運行ggplot代碼之後,R基本上會掛起一段時間,然後在形狀文件上渲染大量的行。我列出了一些可能的問題,但是我又是一個完全的新手......再次感謝您的時間! :) – user2300643

回答

7

當你強化你的shapefile時,你會得到錯誤的ID。而應根據shapefile的行名顯式添加一個ID列,並使用它來合併。您也不告訴geom_polygon如何對data.frame中的行進行分組,因此它們都被繪製爲一個連續重疊的自交多邊形。向geom_polygon添加組參數。我也喜歡用RColorBrewer爲地圖選擇漂亮的顏色(使用功能brewer.pal)。

試試這個:

require(RColorBrewer) 
[email protected]$id <- rownames([email protected]) 
sh.df <- as.data.frame(shape2) 
sh.fort <- fortify(shape2 , region = "id") 
sh.line<- join(sh.fort, sh.df , by = "id") 


mapdf <- merge(sh.line , data.2 , by.x= "NAME", by.y="NAME" , all=TRUE) 
mapdf <- mapdf[ order(mapdf$order) , ] 

ggplot(mapdf , aes(long , lat))+ 
    geom_polygon(aes(fill = cans , group = id) , colour = "black")+ 
    scale_fill_gradientn(colours = brewer.pal(9 , "Reds"))+ 
    coord_equal() 

enter image description here

+0

謝謝!沒有你的幫助,我永遠都不會想到它!它完美運行,RColorBrewer包視覺上有了巨大的改進。 – user2300643

+1

@ user2434624我很高興這對你有所幫助。是的,「ColorBrewer」套件非常棒! –

+0

對不起,這只是彈出在我的頭......我不知道這是否需要問一個新的問題,但我怎麼能把強化/合併文件恢復成一個形狀文件?具體來說,我想使用writeOGR()函數將其寫成GeoJSON數據... – user2300643