r - 使用 ggplot 绘制带孔的多边形(在城市 map 中)

标签 r ggplot2 shapefile

我有 3 个用于创建城市 map 的 shp 文件:

  • land.shp(多边形绘制水面以上的土地)
  • road.shp(多边形绘制所有的道路,注意有的是“环路”,就是中间有个洞)
  • building.shp(绘制所有建筑物的多边形)

我用QGIS画出我想要的 map ,然后用ggplot打land.shp,然后road.shp和building shp再做一遍。以下是谷歌地图的输出,用于说明我的问题:

enter image description here

你可以看到它们之间有 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")

enter image description here

关于r - 使用 ggplot 绘制带孔的多边形(在城市 map 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12033560/

相关文章:

在 Ubuntu 18.04 上的 mlr R 包中运行随机搜索需要太长时间

r - 在 R 中 append 两个矩阵而不会丢失dimnames

r - 阅读非常大的NDJSON

r - 为什么箱线图无法正确显示,只有平线?

r - 在 ggplot 中突出显示单个 "bar"

r - 使用 poly2nb() 的邻居列表适用于 2004 年人口普查 shapefile,但不适用于 2011 年

PHP - 将 xy .shp 坐标转换为 Google map lat/lng

r - 使用 R 访问列表中的项目,在拆分和应用后组合

r - 是否可以在 ggplot2 堆叠条中的堆叠之间放置空间?

c++ - vss 示例硬件提供程序