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

Posted

技术标签:

【中文标题】在传单中绘制 shp 文件,在 ggplot 中工作【英文标题】:Plotting shp file in leaflet, works in ggplot 【发布时间】:2016-01-10 03:28:41 【问题描述】:

我很难让我的数据框在传单中绘制。我有一个 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))

结果是纽约市收入分配的等值线图:

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

不知道如何从 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("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")) : 未使用的参数(coords = xy, proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"))

我显然遗漏了一些东西,但我无法在网上任何地方找到此问题的任何示例。

我非常感谢有关 shapefile 和在传单中绘图的任何提示或建议。

【问题讨论】:

由于我没有看到您的传单代码,我不确定发生了什么。但是,我认为您可以在传单中同时使用 data.frame 和空间类对象;您可能不必将 data.frame 转换为 SPdataframe。 SpatialPolygonsDataFrame 定义为SpatialPolygonsDataFrame(Sr, data, match.ID = TRUE)。您需要先转换为SpatialPolygonshelp("SpatialPolygonsDataFrame-class")中有一个例子 @jazzurro,感谢您的回复。使用以下传单代码:leaflet(nyc_plotData) %>% addTiles() %>% addPolygons() 我收到以下错误:polygonData.default(data) 中的错误:不知道如何从类对象获取路径数据数据帧 @hrbrmstr 如果没有任何进一步的支持,传单不应该能够使用SpatialPolygonsDataFrame吗? @Konrad OP 正在尝试将强化数据框直接转换为 SPDF。 【参考方案1】:

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

【讨论】:

以上是关于在传单中绘制 shp 文件,在 ggplot 中工作的主要内容,如果未能解决你的问题,请参考以下文章

使用OpenGL绘制shp文件

在 ggplot 和 shapefile 中创建的重叠图

在ggplot2中绘制形状文件

计算 ggplot stat_summary2d 和 stat_bin2d 的表面积

如何使用 ggplot 在 R 中自动绘制图形并将它们保存到文件夹中?

r - 在传单上叠加fileInput闪亮