在传单中绘制shp文件,在ggplot中工作

时间:2015-10-12 15:23:35

标签: r leaflet shapefile

我难以让我的数据框在传单中绘图。我有一个shapefile和一个我合并在一起的csv。生成的数据框有几列,包括long,lat和" percent"。

我可以使用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

当我尝试在传单中使用相同的数据帧时,我收到此错误:

  

不知道如何从类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"))

给出以下错误:

  

SpatialPolygonsDataFrame中的错误(coords = xy,data = nyc_plotData,proj4string = CRS(&#34; + proj = longlat + datum = WGS84 + ellps = WGS84 + towgs84 = 0,0,0&#34;)):     未使用的参数(coords = xy,proj4string = CRS(&#34; + proj = longlat + datum = WGS84 + ellps = WGS84 + towgs84 = 0,0,0&#34;)

我明显遗漏了一些东西,但我无法在网上找到任何有关此问题的例子。

我非常感谢任何关于shapefile和绘图的提示或建议。

1 个答案:

答案 0 :(得分: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))