R 使用ggmap打印形状文件:当形状文件大于ggmap时进行剪裁
当我尝试将ggmap与形状文件组合时,我遇到了剪辑问题。Kahle和Wickham(2013:158)中的示例效果很好,因为ggmap中的光栅图像覆盖了整个形状文件。下面是一个例子,当我尝试在覆盖较小区域的ggmap图上绘制美国各州的形状文件时,会发生什么。ggmap显示了纽约市,我想用美国各州的边界覆盖它(作为一个例子)。生成的贴图没有任何意义。问题是形状文件被剪裁,ggplot连接未剪裁的点。下面是代码。形状文件来自。我只是在这里展示最后一个情节 我怎样才能解决这个问题R 使用ggmap打印形状文件:当形状文件大于ggmap时进行剪裁,r,ggplot2,ggmap,R,Ggplot2,Ggmap,当我尝试将ggmap与形状文件组合时,我遇到了剪辑问题。Kahle和Wickham(2013:158)中的示例效果很好,因为ggmap中的光栅图像覆盖了整个形状文件。下面是一个例子,当我尝试在覆盖较小区域的ggmap图上绘制美国各州的形状文件时,会发生什么。ggmap显示了纽约市,我想用美国各州的边界覆盖它(作为一个例子)。生成的贴图没有任何意义。问题是形状文件被剪裁,ggplot连接未剪裁的点。下面是代码。形状文件来自。我只是在这里展示最后一个情节 我怎样才能解决这个问题 path <-
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)
path我想看看这个答案,当你放大时,ggmap似乎没有以理想的方式处理多边形,也就是说,不在绘图上的项目被截断,导致与形状文件相关的“有趣”结果
#转换以获得良好的度量
以下是我的尝试。我经常使用GADM shapefile,您可以使用光栅
包直接导入。我为NY、NJ和CT子集了形状文件。您最终可能不必这样做,但最好减少数据量。当我绘制地图时,ggplot自动删除了停留在ggmap图像bbox之外的数据点。因此,我不必做任何额外的工作。我不确定你用的是哪种形状文件。但是,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))
很好的结果,使用多边形的geom_路径会遇到的一个问题是,如果形状文件中的顶点数量不够多,那么将在地图边缘附近进行截断。这是否解决了截断问题ggmap(mymap)+geom_map(data=map,map=map,aes)(x=long,y=lat,map_id=id,group=group),color=“black”,fill=NA,size=0.5)
?我在边界线的中顶端看到了问题,但在geom_map
和fill=NA
@user2503795中似乎没有问题。我为你感到高兴。@jazzurro:谢谢!基于您的解决方案,我认为对我的问题最简单的回答是:使用geom\u map
而不是geom\u polygon
,并调整参数(添加map=[强化数据框]
和map\u id=id
作为aes
调用的美学参数)@user2503795我很高兴听到您根据这个答案找到了解决方案。谢谢你在这里分享你自己的想法。这将在将来帮助其他一些用户。:)这里的问题与这个问题有关吗?
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))
ggmap(mymap) +
geom_path(data = map, aes(x = long, y = lat, group = group))