ggplot省略了多边形孔

geo*_*ory 5 r ggplot2

我很难让ggplot绘制具有孔的多边形。以下说明。首先使用获取shapefile git clone https://github.com/geotheory/volcano。下一个:

require(ggplot2); require(ggmap); require(dplyr); require(maptools)
v = readShapePoly('volcano/volcano.shp')
v@proj4string = CRS('+proj=longlat +datum=WGS84')

# confirm polygons spatially exclusive (don't overlap)
plot(t(bbox(v)), type='l', lwd=8)
plot(v, col=paste0(colorRampPalette(c('grey','red'))(8),'dd'), add=T)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

看起来还可以 一dd,如果由多个多边形挡住阿尔法应该呈现的线不可见。现在让我们尝试ggplot。

d = fortify(v) %>% as_data_frame()
bb = bbox(v)
toner = get_stamenmap(c(bb[1,1], bb[2,1], bb[1,2], bb[2,2]), zoom=11, maptype='toner')
ggmap(toner) + geom_polygon(data=d, aes(long, lat, group=group, fill=id), alpha=.5)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

中心多边形必须重叠,因为基础地图在中心完全被遮盖了。让我们检查漏洞的强化数据:

d %>% select(id, hole) %>% table()
   hole
id  FALSE TRUE
  0   278    0
  1   715    0
  2   392  388
  3   388  331
  4   390  265
  5   265  387
  6   328  125
  7   125    0
Run Code Online (Sandbox Code Playgroud)

看起来还不错,所以让我们尝试分别对其进行可视化。

i = 3
plot(v[i,], col='red') 
ggplot(filter(d, id == i-1)) + geom_polygon(aes(long, lat, group=group, col=hole), fill=NA)
ggplot() + geom_polygon(data=filter(d, id==i-1), aes(long,lat, group=group))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

似乎出了点问题。ggplot似乎无视这些漏洞。除非shapefile有问题。任何建议如何诊断/解决此问题?

cut*_*h44 4

“hadley/ggplot2:绘制多边形形状文件”“...,保留孔状态,但 ggplot2 不使用此信息”。幸运的是,ggspatial“Fish & Whistle:ggplot 多边形中的洞”教我,似乎解决了一些问题,例如重叠问题。(“Biggin Hill”标签上方的白色区域不是由于ggspatial包装造成的,因为它也在ggplot(d) + geom_polygon(aes(long, lat, group = group, fill = id))我的环境中)

devtools::install_github("paleolimbot/ggspatial")

library(ggspatial)

ggmap(toner) + geom_spatial(data=v, aes(fill=id), alpha=.8)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述