我很难让我的数据框在传单中绘制。我有一个shapefile和一个csv合并在一起。生成的数据框有几列,包括long、lat和“百分比”。
我可以使用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))
结果是一张纽约市收入分布的choropleth地图:
当我尝试在传单中使用相同的数据帧时,会出现以下错误:
不知道如何从类 data.frame 的对象获取路径数据
我知道我必须重新格式化我的数据帧。我尝试了各种方法转换为空间多边形数据帧。例如:
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"))
给出以下错误:
空间多边形数据帧中的错误(coords = xy, data = nyc_plotData, proj4string = CRS(“ proj=longlat datum=WGS84 ellps=WGS84 towgs84=0,0,0”)) : 未使用的参数 (coords = xy, proj4string = CRS(“ proj=longlat datum=WGS84 ellps=WGS84 towgs84=0,0,0”))
我显然遗漏了一些东西,但我在网上找不到任何关于这个问题的例子。
我真的很感谢任何关于形状文件和传单中绘图的提示或建议。
正如其他人指出的(您注意到的),您需要转换为空间多边形数据帧
。为了做到这一点,我认为你需要将每个区域转换为多边形
,然后是多边形,然后是空间多边
形,最后是空间多边形数据帧
。下面有用于此的代码。
另一种方法:您从SentialPolygonsDataFrame
开始,然后使用fortify
与ggplot2
进行映射。您可以返回原始SentialPolygonsDataFrame
并将数据槽与表格人口普查数据合并(注意不要更改行顺序)。
我在这里对这两个选项做了更详细的介绍。
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))