r - 在传单中绘制 shp 文件,适用于 ggplot

标签 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

当我尝试在传单中使用相同的数据框时,出现此错误:

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 和在传单中绘图的提示或建议。

最佳答案

正如其他人指出的(并且您注意到)您需要转换为 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))

关于r - 在传单中绘制 shp 文件,适用于 ggplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33084728/

相关文章:

r - 将数据分成 tidyr 中另一列给出的列

r - 测试 X 是否在 Y +/- 小公差范围内的简洁方法?

leaflet - 实时地理定位 ionic

ruby - 为 shapefile 中的多边形着色

r - 合并 Shapefile 和数据框

javascript - R中的htmlwidgets中没有图形输出

r - 如何在 ggpairs [GGally] 中自定义线条

javascript - 我怎样才能提前载入传单 map ?

shiny - 在不重新绘制传单 map 的情况下进行 Shiny 的 UI 调整

import - 在shp2pgsql中自动修复环形自交点