Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用ggplot打印带有孔的多边形(在城市地图中)_R_Ggplot2_Shapefile - Fatal编程技术网

R 使用ggplot打印带有孔的多边形(在城市地图中)

R 使用ggplot打印带有孔的多边形(在城市地图中),r,ggplot2,shapefile,R,Ggplot2,Shapefile,我有3个shp文件用于创建城市地图: land.shp(绘制水面上土地的多边形) road.shp(绘制所有道路的多边形,注意其中一些是“环形道路”,这意味着中间有一个洞) building.shp(多边形图形所有建筑物) 我使用QGIS绘制了我想要的地图,然后使用ggplot播放land.shp,然后使用road.shp和building shp再次播放。下面是Google地图的输出,以说明我的问题: 你可以看到有2座桥和一些海(我没有海平面,我只是把背景设置成蓝色)在它们之间,用蓝点标

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

  • land.shp(绘制水面上土地的多边形)
  • road.shp(绘制所有道路的多边形,注意其中一些是“环形道路”,这意味着中间有一个洞)
  • building.shp(多边形图形所有建筑物)
我使用QGIS绘制了我想要的地图,然后使用ggplot播放land.shp,然后使用road.shp和building shp再次播放。下面是Google地图的输出,以说明我的问题:

你可以看到有2座桥和一些海(我没有海平面,我只是把背景设置成蓝色)在它们之间,用蓝点标记。在R中,该区域应该是一个洞,但它都充满了灰色。同样的问题也涉及到使用红点标记的灰色区域,这是一块土地,以及使用绿点标记的另一个灰色区域,这是一座被道路包围的建筑物

我会把陆地/海洋/建筑物放在路洞里。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")
库(ggplot2)

ids为什么要用多边形绘制道路?道路是线性特征,因此应该是直线。线数据集没有孔。那么,你所包含的地图实际上并没有显示R中发生了什么?R输出不是更有用吗?更令人困惑的是,如果在R中读入的“海”确实有一个区域,并且它显示为灰色,那么要么绘图不考虑“多孔性”,要么海洋确实是一个可以绘制蓝色(或透明)的实际区域。我们真的需要数据本身,或者你正在使用的代码和你看到的结果。如果你也想要轮廓,为每个环分配一个变量,并使用geom_path:datapoly$rings=c(rep(1,5),rep(2,5),rep(3,5),rep(4,5))和添加+geom_path(aes(group=rings))到你的ggplot,以下可能也相关