【问题标题】:Spacial data for region mapping区域映射的空间数据
【发布时间】:2017-03-29 16:37:34
【问题描述】:

我有一些英国的数据,我需要介绍一张英格兰所有 9 个地区的地图。我尝试使用 library(maps),但我得到的地块没有任何区域信息,我最终得到了整个英国。

理想情况下,我正在寻找这样的结果 https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/English_regions_2009.svg/370px-English_regions_2009.svg.png

(由于缺少声望点,我实际上无法附上图片,抱歉!)

我的数据有一列包含字符值的区域:

         EastMid
         EastEng 
         London
         NorthEast 
         NorthWest 
         SouthEast 
         SouthWest
         WestMid 
         Yorkshire

然后我会继续按具有不同属性的颜色区域进行映射

我将如何处理这件事?

【问题讨论】:

  • 可能你最好的选择是找到已经创建了区域突破的 shapefile,然后你可以将你的值映射到。 'uk shapefile' 的快速谷歌搜索提供了一系列可能的来源,其中包括 SE 上的这篇文章:gis.stackexchange.com/questions/154540/…

标签: r maps rstudio


【解决方案1】:

首先,正如 Andrew 所写,您需要找到并下载具有必要区域的 shapefile。这种根据需要进行的拆分通常称为历史区域或标准统计区域。您可能想查看此站点:http://www.natureonthemap.naturalengland.org.uk/

其次,您读取 shapefile 并与公投数据合并。确保公投文件中的区域名称与地理空间文件中的完全相同(我使用从上述站点下载的文件,如果您下载另一个 shapefile,名称可能会有所不同):

library(rgdal)    
library(tmap)
geoEN = readOGR(".", "maghistengland")

在这种情况下,区域名称存储在 NAME 中(在另一个 shapefile 中,属性名称可以不同)。您可以通过以下方式检查地理空间文件包含哪些信息:

ogrInfo(".", "maghistengland")

出于示例的目的,我正在创建投票结果的虚假数字。

votes = as.data.frame(
    cbind(
    c("EAST MIDLANDS",
    "EAST OF ENGLAND",
    "LONDON",
    "NORTH EAST",
    "NORTH WEST",
    "SOUTH EAST",
    "WEST MIDLANDS",
    "YORKSHIRE AND THE HUMBER",
    "SOUTH WEST"),
    c(60, 65, 55, 50, 45, 40, 35, 30, 30),
    c(40, 35, 45, 50, 55, 60, 65, 70, 70)
  ), stringsAsFactors = FALSE)

names(votes) = c("Regions", "Yes", "No")

votes$Yes = as.numeric(votes$Yes)
votes$No = as.numeric(votes$No)
votes$Result = colnames(votes)[max.col(votes[,2:3])+1]

现在我们可以合并两个文件了:

mapEN = append_data(geoEN, votes, key.shp = "NAME", key.data = "Regions")

第三,创建必要的图表。这里有三个例子。您可以使用组数(n = 2、3、4..)、颜色等。

tm_shape(mapEN) +
    tm_fill("Yes", title = "This is a title", palette = "Blues", n=4) +
    tm_borders(alpha=.5)

tm_shape(mapEN) +
    tm_fill("No", title = "This is a title", palette = "Reds", n=5) +
    tm_borders(alpha=.5)

tm_shape(mapEN) +
    tm_fill("Result", palette = c("Red", "Blue")) +
    tm_borders(alpha=.5)

【讨论】:

  • 感谢您非常详细的回答!非常感谢
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多