专栏首页庄闪闪的R语言手册R可视乎|空间地理数据可视化(1)

R可视乎|空间地理数据可视化(1)

1. 前言

研究生讨论班第一次用 slides 作报告,主要讲了《Geospatial Health Data》[1]一书中关于空间地理数据可视化的内容。文末给出对应的 pdf 网页版本。

本篇主要介绍:用 R 包制作地图的基础内容,之后会再详细介绍数据可视化主要的 R 包和函数,敬请期待。由于本文内容较多,所以做了下思维导图:

2. 空间数据类型

一个 d 维的空间过程如下所示:

{Z(\boldsymbol{s}): \boldsymbol{s} \in D \subset \mathbb{R}^d}

其中,s 为观测的位置,Z 指的是我们所观测的属性,例如,婴儿猝死数量或降雨量。通过域 D 的特征可将空间数据分为:区域数据(areal data)、地理统计数据(geostatistical data)、点模式数据(point patterns)。接下来分别对这三类数据进行介绍。

2.1 区域数据

区域数据中,域 D 是固定的并且被划分为具有明确边界的有限数量单元,人们常通过邮区编号、人口普查、像素报告的遥感数据等来收集获取区域数据。

例子:1974 年美国北卡罗来纳州各县婴儿猝死数量(Sudden Infant Death),如下图所示:

1974年美国北卡罗来纳州各县婴儿猝死数量

基于此,通过利用人口和其他协变量数据,可获得每个县的死亡风险估计。

2.2 地理统计数据

对于这种类型的数据,域 D 是一个连续的固定集合。连续是指 s 可以在 D 中连续地变化,Z(s)可以在 D 的任何地方被观测到,Z(s) 可以是连续的也可以是离散的;固定是指域 D 中的点是非随机的(non-stochastic)。

例子:下图是巴西巴拉那州 143 个记录站的旱季平均降雨量:

巴西巴拉那州143个记录站测量的平均降雨量

上图中的数据代表了特定站点获得的降雨量的测量值,可使用地理统计学的相关模型预测来未取样站点的降雨量。

2.3 点模式数据

与前两种数据不同,点模式数据中域 D 是随机的,s 给出了随机事件的位置。对于

{\forall}\boldsymbol{s} \in D

Z(s)表示事件的发生,其值可以为 1,也可以是随机地给出一些额外的信息。

例子:居住在城市中患有特定疾病的个人的地理坐标,如下图所示:

约翰·斯诺绘制的1854年伦敦霍乱爆发的地图

我们可以使用点过程方法分析这些数据来了解死亡的空间分布,并评估某位置附近是否存在过度的疾病风险。

3. 坐标参考系统

坐标参考系统(Coordinate Reference Systems,CRS),是用来表示空间数据的重要工具,通过使用坐标参考系统我们可以知道坐标的原点和测量单位。CRS主要有地理坐标参考系统(又称非投影坐标参考系统)和投影坐标参考系统两类

地球的三维表面(左)和地球的二维表面(右)

3.1 地理坐标参考系统

  • 使用经度和纬度来确定地球三维椭圆体表面上的位置。
  • 纬度和经度是以十进制度(DD)或度、分、秒(DMS)为单位的角度。
  • 地球表面一个点的纬度是赤道平面与通过该点和地球中心的直线之间的角度。
  • 地球表面某一点的经度是指本初子午线以西或以东到一条经过该点的经线的角度。

地球的纬线(左)和经线(右)

3.2 投影坐标参考系统

投影是将地球的三维表面转化为某一个二维平面,所有的地图投影都会以某种方式扭曲地球表面,并不能同时保留所有的面积、方向、形状和距离属性。

最常用的投影方式是墨卡托投影(Universal Transverse Mercator,UTM),这种投影方式将地球划分为60个经度为6度的区域,每个区域都使用横向墨卡托投影,绘制出一个南北方向的范围。

例子:下图是CMG Lee 绘制的等距矩形世界地图的通用横轴墨卡托区域,其中不规则区域和纽约市突出显示:

CMG Lee 绘制的等距矩形世界地图上的通用横轴墨卡托区域

地球上的某一位置可由UTM区号、半球(南或北)以及区的东经和北纬的坐标(以米为单位)给出。关于这种投影进一步的细节,可查看维基百科[2]

3.3 在 R 中设置坐标参考系统

地球的形状可以用一个扁椭球形的模型来近似,它在赤道上隆起,在两极扁平,目前世界上有很多不同的参考椭球体来使用,最常用的是全球定位系统(GPS)所使用的世界大地测量系统(WGS84)

除此之外,还有欧洲石油调查组(EPSG)所制定的地图,由于坐标系的不同,各地的地图也会不同,例如中国:以地球几何球心为中心时,EPSG 代码为 4479;以地球椭球焦点为中心时,EPSG 代码为 4480。WGS84 的 EPSG 代码为 4326。

在 R 语言中,CRS 是用 proj4 字符串指定的,这些字符串指定了投影、椭球体和基准点的属性。例如,WGS84 经度/纬度投影被指定为

"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"

UTM 29 区的 proj4 字符串由以下公式给出

"+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"

而南方的 UTM29 区为

"+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs +south"

此外,如果我们希望将数据d转换为具有不同投影的数据,则可以使用 rgdal 包中的 spTransform() 函数或 sf 包中的 st_transform() 函数。

例子:创建一个由经度和纬度给出坐标的空间数据集,并使用 rgdal 将其转换为南方 UTM 35 区的坐标数据集:

library(rgdal)

# create data with coordinates given by longitude and latitude
d <- data.frame(long = rnorm(100, 0, 1), lat = rnorm(100, 0, 1))
coordinates(d) <- c("long", "lat")

# assign CRS WGS84 longitude/latitude
proj4string(d) <- CRS("+proj=longlat +ellps=WGS84
                      +datum=WGS84 +no_defs")

# reproject data from longitude/latitude to UTM zone 35 south
d_new <- spTransform(d, CRS("+proj=utm +zone=35 +ellps=WGS84
                      +datum=WGS84 +units=m +no_defs +south"))

# add columns UTMx and UTMy
d_new$UTMx <- coordinates(d_new)[, 1]
d_new$UTMy <- coordinates(d_new)[, 2]

4. 图形文件

  1. 空间地理数据是用一个叫做 shapefile 的数据存储格式来表示的,它可以储存位置、形状及其他地理属性。
  2. 一个 shapefile 是由一系列相关的文件组成,这些文件有不同的拓展名,并存储在同一个目录中。一个shapefile必须包括的三个文件为:.shp.shx.dbf,可以构成 shapefile 的其他文件另有 .prj.sbn.sbx.shp.xml
  3. 我们可以使用 rgdal 包中的 readOGR() 函数,或者 sf 包中的 st_read() 函数来读取 shapefile 文件。

例子:用 readOGR() 读取存储在 sf 包中的北卡罗来纳州的 shapefile,如下所示:

# name of the shapefile of North Carolina of the sf package
nameshp <- system.file("shape/nc.shp", package = "sf")

library(rgdal)
map <- readOGR(nameshp, verbose = FALSE)
class(map)
head(map@data)
##    AREA PERIMETER CNTY_ CNTY_ID        NAME  FIPS
## 0 0.114     1.442  1825    1825        Ashe 37009
## 1 0.061     1.231  1827    1827   Alleghany 37005
## 2 0.143     1.630  1828    1828       Surry 37171
## 3 0.070     2.968  1831    1831   Currituck 37053
## 4 0.153     2.206  1832    1832 Northampton 37131
## 5 0.097     1.670  1833    1833    Hertford 37091
##   FIPSNO CRESS_ID BIR74 SID74 NWBIR74 BIR79 SID79
## 0  37009        5  1091     1      10  1364     0
## 1  37005        3   487     0      10   542     3
## 2  37171       86  3188     5     208  3616     6
## 3  37053       27   508     1     123   830     2
## 4  37131       66  1421     9    1066  1606     3
## 5  37091       46  1452     7     954  1838     5
##   NWBIR79
## 0      19
## 1      12
## 2     260
## 3     145
## 4    1197
## 5    1237

rgdal 包导入的北卡罗来纳州的地图如下图所示:

plot(map)

由 rgdal 包得到的美国北卡罗来纳州地图

  1. st_read() 读取地图:
# read shapefile with st_read()
library(sf)
map <- st_read(nameshp, quiet = TRUE)
class(map)
head(map)

##    AREA PERIMETER CNTY_ CNTY_ID        NAME  FIPS
## 0 0.114     1.442  1825    1825        Ashe 37009
## 1 0.061     1.231  1827    1827   Alleghany 37005
## 2 0.143     1.630  1828    1828       Surry 37171
## 3 0.070     2.968  1831    1831   Currituck 37053
## 4 0.153     2.206  1832    1832 Northampton 37131
## 5 0.097     1.670  1833    1833    Hertford 37091
##   FIPSNO CRESS_ID BIR74 SID74 NWBIR74 BIR79 SID79
## 0  37009        5  1091     1      10  1364     0
## 1  37005        3   487     0      10   542     3
## 2  37171       86  3188     5     208  3616     6
## 3  37053       27   508     1     123   830     2
## 4  37131       66  1421     9    1066  1606     3
## 5  37091       46  1452     7     954  1838     5
##   NWBIR79
## 0      19
## 1      12
## 2     260
## 3     145
## 4    1197
## 5    1237

sf 包导入的北卡罗来纳州的地图可以产生如下结果:

plot(map)

由 sf 包得到的美国北卡罗来纳州地图

小编有话说

  • 本篇主要介绍:用 R 包制作地图的基础内容,包括:几种空间数据类型、不同的坐标参考系统介绍以及如何使用 R 包导入图形文件以及绘图。
  • 这是空间地理数据可视化系列的第一期,主要由 林华师 制作。本系列的宗旨是带你系统学习如何使用 R 对空间地理数据进行可视化
  • 未来几期会具体介绍各类绘制空间地理数据的 R 包,敬请期待。

参考资料

[1]

《Geospatial Health Data》: https://www.paulamoraga.com/book-geospatial/sec-spatialdataandCRS.html

[2]

维基百科: www.wikipedia.org

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:林华师

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R可视化 | 地理信息空间(上)

    设计目的:进行地理文件的加载、数据转换及基础处理,将地理信息数据与业务数据的融合(sp与sf数据模型),添加地理标签,应用地理坐标轴,最终完成一个地理空间可视化...

    朱小五
  • R可视化 | 地理信息空间(下)

    张杰.《R语言数据可视化之美-专业图表绘制指南(增强版)》第11章 地理空间型图表: https://www.cnblogs.com/zzj420133722/...

    朱小五
  • 可视化流式地理空间数据

    最近参与了一个涉及流媒体信用卡交易数据并根据风险概率对其进行分类的项目。在此基础上,想探索可视化数据的选项。决定专注于地理方面,因为它是尝试识别欺诈性交易时的关...

    代码医生工作室
  • 实验3 地理空间数据可视化

    实验结果:(1)自己家乡及其位置信息;(2)图8-10,可以手绘,可以文字描述,也可以将图缩小打印贴上;

    步行者08
  • 使用kepler.gl可视化地理空间数据

    一个精美的图片!我特别喜欢城市周围的线条,它们交织在一起,呈现出一幅非常精确的城市地图的实际面貌。这个可视化地理空间数据是我最喜欢的项目之一。

    磐创AI
  • 使用R语言对进行地理空间数据可视化

    每次shooting的位置在下面的地图上用红色圆圈标记。圆圈的大小取决于死亡人数。

    拓端
  • 空间地理数据可视化之 tmap 包及其拓展

    本篇 R 可视化将继续介绍 《Geospatial Health Data》[1] 中用 R 包制作地图的相关内容,使用的包是 tmap ,创建出来的图像多种多...

    庄闪闪
  • 空间地理数据可视化之 leaflet 包及其拓展

    这一期 R 可视化介绍的是 leaflet 包及其扩展内容,除了《Geospatial Health Data》[1]一书中介绍的关于此包的基本使用方法外,小编...

    庄闪闪
  • 空间地理数据可视化之 ggplot2 包及其拓展

    上次 R 可视乎主要讲述了《Geospatial Health Data》[1]一书中关于空间地理数据可视化用 R 包制作地图的基础内容,参见 R可视乎|空间地...

    庄闪闪
  • 「R」数据可视化1: 火山图

    在生物领域我们常常使用R语言对数据可视化。在对数据可视化的时候,我们需要明确想要展示的信息,从而选择最为合适的图突出该信息。本系列文章将介绍多种基于不同R包的作...

    王诗翔呀
  • 使用R语言对进行空间数据可视化

    每次shooting的位置在下面的地图上用红色圆圈标记。圆圈的大小取决于死亡人数。弗吉尼亚理工大学(均为学校案)在这段时间内是最致命的。

    拓端
  • 左手用R右手Python系列12——空间数据可视化与数据地图

    以前我一直觉得Python的绘图工具与R语言ggplot2比起来,不够优雅,这也是我一直坚定的选择使用R+ggplot2深入的学习数据可视化的原因,ggplot...

    数据小磨坊
  • 「R」ggplot2数据可视化

    R有几种不同的系统用来产生图形,但ggplot2是最优雅而多变的那一种。ggplot2实现了图形语法,一种描述和构建图形的逻辑系统。通过ggplo2,我们能够快...

    王诗翔呀
  • Python-matplotlib 空间栅格数据可视化

    python-matplotlib 在地理空间数据可视化绘制方面也还是有一定的优势的,为更新colorbar绘制应用范围,我们把gis,遥感等专业的需要常做的空...

    气象学家
  • 【完整案例】如何用R实现空间数据可视化

    image.png 流行病学的数据讲究“三间分布”,即人群分布、时间分布和空间分布。其中的“空间分布”最好是在地图上展示,才比较清楚。R软件集统计分析与高级...

    小莹莹
  • SpatialDB:让空间转录组数据可视化

    2019年11月,来自中国科学院生物物理研究所高通量测序中心的研究人员发布第一个单细胞空间转录组数据库及数据在线可视化平台:SpatialDB,为研究组织的空间...

    尐尐呅
  • 大数据可视化系列1: 可视化周期表

    原图:http://www.visual-literacy.org/periodic_table/periodic_table.html ? 以上这张类似化学元...

    小莹莹
  • 大数据可视化系列1: 可视化周期表

    大数据文摘
  • 空间数据可视化笔记——simple features空间对象基础

    是不是感觉被封面图和不明觉厉的题目给骗进来了哈哈哈,今天这篇是理论篇,没有多少案例,而且还很长,所以静不下心的小伙伴儿可以先收藏着,时间充裕了再看。 ---- ...

    数据小磨坊

扫码关注云+社区

领取腾讯云代金券