当我尝试将ggmap与shape文件组合时,我遇到了剪辑问题.Kahle和Wickham(2013:158)中的示例工作正常,因为ggmap中的栅格图像覆盖整个形状文件.下面是当我尝试在覆盖较小区域的ggmap图上绘制美国州的形状文件时会发生什么的示例.ggmap显示了纽约市,我希望用美国各州的边界覆盖它(仅作为示例).生成的地图没有任何意义.问题是形状文件被剪裁,ggplot连接未剪切的点.下面是代码.形状文件来自这里.我只是在这里展示最后的情节.
我怎么解决这个问题?
path <- "PATH TO SHAPEFILE"
library("ggmap")
library("rgdal")
# shapefile
states <- readOGR(dsn = path, layer = "states")
states_df <- fortify(states)
# plot shapefile
plot(states, lwd = 0.1)
ggplot(states_df, aes(long, lat, group = group)) +
geom_polygon(colour = "black", fill = NA, size = 0.1)
# combine ggmap with shapefile
map <- get_map("new york city", zoom = 10, source = "stamen")
ggmap(map, extent = "device")
ggmap(map, extent = "device") +
geom_polygon(aes(long, lat, group=group), data = states_df, colour = "red", fill = NA, size = 1)
Run Code Online (Sandbox Code Playgroud)
Kahle,David和Hadley Wickham.2013."Ggmap:使用ggplot2进行空间可视化."R Journal 5(1):144-61.

这是我的尝试。我经常使用GADM shapefile,您可以使用该raster包直接将其导入。我为NY,NJ和CT分配了形状文件。您可能最终不必这样做,但是减少数据量可能更好。当我绘制地图时,ggplot会自动删除ggmap图像的bbox之外的数据点。因此,我不必做任何其他工作。我不确定您使用了哪个shapefile。但是,GADM的数据似乎可以与ggmap图片配合使用。希望这对您有所帮助。
library(raster)
library(rgdal)
library(rgeos)
library(ggplot2)
### Get data (shapefile)
us <- getData("GADM", country = "US", level = 1)
### Select NY and NJ
states <- subset(us, NAME_1 %in% c("New York", "New Jersey", "Connecticut"))
### SPDF to DF
map <- fortify(states)
## Get a map
mymap <- get_map("new york city", zoom = 10, source = "stamen")
ggmap(mymap) +
geom_map(data = map, map = map, aes(x = long, y = lat, map_id = id, group = group))
Run Code Online (Sandbox Code Playgroud)

如果您只想要行,那么下面就是您想要的。
ggmap(mymap) +
geom_path(data = map, aes(x = long, y = lat, group = group))
Run Code Online (Sandbox Code Playgroud)
