我有 3 个用于创建城市 map 的 shp 文件:
- land.shp(多边形绘制水面以上的土地)
- road.shp(多边形绘制所有的道路,注意有的是“环路”,就是中间有个洞)
- building.shp(绘制所有建筑物的多边形)
我用QGIS画出我想要的 map ,然后用ggplot打land.shp,然后road.shp和building shp再做一遍。以下是谷歌地图的输出,用于说明我的问题:
你可以看到它们之间有 2 座桥和一些海(我没有海 shp,我只是将背景设置为蓝色),用蓝点标记。在R中,那个区域应该是一个洞,但是里面全是灰色。同样的问题出现在用红点标记的灰色区域,这是一 block 土地,以及另一个用绿点标记的灰色区域,这是一栋被道路包围的建筑物。
我将在 road.shp 的洞中有陆地/海洋/建筑物,我无法使用 R 显示它们。
谁能教我如何在 R 中显示 road.shp 层后面的东西?谢谢。
最佳答案
绘制带孔多边形的一个常见约定是:
- 一个闭合多边形,其点逆时针形成一个实心形状
- 点顺时针前进的封闭多边形形成一个洞
那么,让我们构建一些数据和绘图:
library(ggplot2)
ids <- letters[1:2]
# IDs and values to use for fill colour
values <- data.frame(
id = ids,
value = c(4,5)
)
# Polygon position
positions <- data.frame(
id = rep(ids, each = 10),
# shape hole shape hole
x = c(1,4,4,1,1, 2,2,3,3,2, 5,10,10,5,5, 6,6,9,9,6),
y = c(1,1,4,4,1, 2,3,3,2,2, 5,5,10,10,5, 6,9,9,6,6)
)
# Merge positions and values
datapoly <- merge(values, positions, by=c("id"))
ggplot(datapoly, aes(x=x, y=y)) +
geom_polygon(aes(group=id, fill=factor(value))) +
scale_fill_discrete("Key")
关于r - 使用 ggplot 绘制带孔的多边形(在城市 map 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12033560/