【问题标题】:Use ggplot to plot polygon with holes (in a city map)使用 ggplot 绘制带孔的多边形(在城市地图中)
【发布时间】:2012-08-15 12:59:24
【问题描述】:

我有 3 个 shp 文件用于创建城市地图:

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

我使用 QGIS 绘制了我想要的地图,然后我使用 ggplot 播放land.shp,然后使用 road.shp 和 building shp 再做一次。下面是谷歌地图的输出来说明我的问题:

您可以看到它们之间有 2 座桥梁和一些海(我没有海 shp,我只是将背景设置为蓝色),用蓝点标记。在 R 中,该区域应该是一个洞,但它全是灰色的。同样的问题是用红点标记的灰色区域,这是一块土地,另一个用绿点标记的灰色区域,是被道路包围的建筑物。

我将在 road.shp 的洞中有陆地/海洋/建筑物,我无法使用 R 显示它们。

谁能教我如何在 R 中显示 road.shp 层背后的东西?谢谢。

【问题讨论】:

  • 为什么要用多边形来绘制道路?道路是线状要素,所以应该是线。线数据集没有孔。 困惑
  • 那么,您所包含的地图实际上并未显示 R 中发生的情况? R输出不是更有用吗? 更加困惑
  • 如果你读入 R 的“海”确实有一个区域并且它显示为灰色,那么要么绘图不尊重“空洞”,要么海真的是一个实际区域你可以绘制蓝色(或透明)。我们确实需要数据本身,或者不知道您正在使用的代码和您看到的结果。

标签: r ggplot2 shapefile


【解决方案1】:

绘制带孔多边形的一个常见约定是:

  • 一个封闭的多边形,其点逆时针形成一个实心形状
  • 一个封闭的多边形,其点按顺时针 前进,形成一个

所以,让我们构造一些数据并绘制:

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")

【讨论】:

  • 如果您还想要轮廓,请为每个环分配一个变量并使用 geom_path:datapoly$rings = c(rep(1,5),rep(2,5),rep(3, 5),rep(4,5)) 并将 +geom_path(aes(group=rings)) 添加到您的 ggplot
猜你喜欢
  • 2017-10-25
  • 2016-10-06
  • 2012-05-18
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
相关资源
最近更新 更多