2015-10-12 20 views
3

我很難讓我的數據框在小冊子中繪製。我有一個shapefile和一個csv,我合併在一起。生成的數據框有幾列,包括long,lat和「percent」。在小冊子中繪製shp文件,在ggplot中工作

我能夠繪製此使用ggplot用下面的代碼:

p <- ggplot() + 
    geom_polygon(data = nyc_plotData, aes(x=long, y=lat, group = group, 
             fill=percent)) + 
    geom_polygon(data = county, aes(x=long, y=lat, group = group), 
             fill=NA, color = "black", size = 0.25) + 
    coord_map(xlim = c(-74.26, -73.71), ylim = c(40.49,40.92)) 

結果是收入分配在紐約市一個地區分佈圖:

nyc plot

當我嘗試使用小冊子中的數據幀相同,我得到這個錯誤:

Don't know how to get path data from object of class data.frame

我知道我必須重新格式化我的數據框。我嘗試了各種方法轉換爲SpatialPolygonDataFrame。例如:

xy <- nyc_plotData[,c(1,2)] 
spdf <- SpatialPolygonsDataFrame(coords = xy, data = nyc_plotData, 
           proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")) 

提供了以下錯誤:

Error in SpatialPolygonsDataFrame(coords = xy, data = nyc_plotData, proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")) : unused arguments (coords = xy, proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"))

我清楚地失去了一些東西,但我一直沒能找到這個問題的任何實例具競爭力的超低。

我真的很感激任何處理shapefile和繪圖單張的提示或建議。

+0

由於我沒有看到您的小冊子代碼,我不確定發生了什麼。然而,我認爲你可以在小冊子中使用data.frame和空間類對象;您可能不必將data.frame轉換爲SPdataframe。 – jazzurro

+0

'SpatialPolygonsDataFrame'被定義爲'SpatialPolygonsDataFrame(Sr,data,match.ID = TRUE)'。您首先需要轉換爲'SpatialPolygons'。 'help(「SpatialPolygonsDataFrame-class」)' – hrbrmstr

+0

@jazzurro有一個例子,謝謝你的回覆。 使用以下傳單代碼:傳單(nyc_plotData)%>%addTiles()%>%addPolygons() 我收到以下錯誤: polygonData.default(data)中的錯誤: 不知道如何獲取路徑數據從類data.frame – Claire

回答

2

正如其他人指出(你注意到),你需要轉換爲SpatialPolygonsDataFrame。爲了做到這一點,我認爲你需要將每個短文轉換成Polygon,然後Polygons,然後SpatialPolygons,最後一個SpatialPolygonsDataFrame。這裏有一些代碼。

替代方法:您從SpatialPolygonsDataFrame開始,然後使用fortifyggplot2進行映射。您可以回到原始SpatialPolygonsDataFrame並將數據槽與表格式人口普查數據合併(注意不要更改行順序)。

我把兩個選項here的更多細節。

library(dplyr) 
library(sp) 

polyFunc<-function(groupname, dat){ 
    poly<-filter(dat, id==groupname) %>% 
    select(long, lat) 
    return(Polygons(list(Polygon(poly)), groupname)) 
} 


tracts <- distinct(ggtract, id, percent) 
tractname <- tracts$id 
polygons<-lapply(tractname, function(x) polyFunc(x, dat=ggtract)) 
sp.polygon<-SpatialPolygons(polygons) 
df.polygon<-SpatialPolygonsDataFrame(sp.polygon, 
            data=data.frame(row.names=tractname, tracts))