我有一个我希望使用ggplot2在旧金山 Map 上叠加的点列表 . 每个点都是经度,纬度对 . 我希望生成的 Map 位于经度/纬度坐标系中 . 我设法使用他的示例文件重现了Hadley Wickham的directions for plotting polygon shapefiles . 我正在使用R 2.15.1 for Windows .
但是,我尝试使用从UScensus2010cdp package下载的cdp文件 . 这是我的代码片段:
require("rgdal")
require("maptools")
require("ggplot2")
require("sp")
require("plyr")
gpclibPermit() # required for fortify method
require(UScensus2010)
require(UScensus2010cdp)
data(california.cdp10)
sf <- city(name = "san francisco", state="ca")
sf.points = fortify(sf)
我收到以下错误:
Using name to define regions.
Error in unionSpatialPolygons(cp, invert(polys)) : input lengths differ
In addition: Warning message:
In split(as.numeric(row.names(attr)), addNA(attr[, region], TRUE)) :
NAs introduced by coercion
有人知道吗:
-
赋予fortify()的region参数有什么好处?
-
如果失败了,ggplot2可以绘制旧金山的未转换纬度/经度坐标的 Map 数据源?
-
或者,我发现here另一张旧金山 Map ,其数据已被翻译 . 你能告诉我如何将这些数据翻译成原始的lat / long或者为我的一组点进行反向翻译吗?
1 回答
注意:
问题
问题产生于
fortify.SpatialPolygonsDataFrame
依赖于将row.names
转换为数字,而数据的rownames是标识符 .在你的情况下
是您希望用作区域参数的标识符,因为
place
state
和name
不能唯一标识三个多边形 .作为字符向量,其中元素以字母字符开头,当强制为数字时,它变为
NA
这是给出的警告之一
解决方案
将列定义为rownames
将row.names设置为
NULL
或1:nrow(sf@data)
所以..