专栏首页庄闪闪的R语言手册空间地理数据可视化之 tmap 包及其拓展

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

前言

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

1. 基本画图设置

tmap 包被用来生成具有极大灵活性的专题地图,创建地图的语法类似于 ggplot2 ,这种地图是通过使用 tm_shape() 函数和用 tm_*() 函数添加图层来创建的。此外,我们可以通过分别设置 tmap_mode("plot")tmap_mode("view") 来创建静态或交互式地图。下面举出一个用 tmap 创建交互式地图的例子。

例子

library(tmap)
tmap_mode("view") ##使用的数据是前两期用过的 map
tm_shape(map) + tm_polygons("SID74")

tmap 创建的1974年北卡罗来纳州婴儿猝死的地图

2. 内容扩展

tmap 包除了可以生成灵活的专题地图外,还允许创建具有多个形状和图层的可视化、创建分面等。

2.1 多个形状和图层

下面的一个例子是使用 tmap 包创建的一个多个形状和图层的世界地图,其中不同的颜色分布代表不同的海拔高度。

例子

library(tmap)
data("World") ##加载数据

data(World, metro, rivers, land)

tmap_mode("plot") ##创建一个静态图

tm_shape(land) + ##添加形状
  tm_raster("elevation", palette = terrain.colors(10)) +
  tm_shape(World) +  ##添加形状
  tm_borders("blue", lwd = .5) +
  tm_text("iso_a3", size = "AREA") +
  tm_legend(show = TRUE) + ##添加图例
  tmap_options(check.and.fix = TRUE)

多个形状和图层的世界地图

2.2 创建分面

使用 tmap 创建分面主要有以下三种方式:

  1. 通过对 aesthetic 设置多个变量,在下面这个例子中是 tm_polygons 函数的第一个参数。

例子

tmap_mode("view") ##创建一个交互式地图,可实现同步移动和放缩
tm_shape(World) +
  tm_polygons(c("income_grp", "life_exp")) +
  tm_facets(sync = TRUE, ncol = 2)

创建分面的第一种方式

在这个例子中,可通过地图的颜色分布初步观察到 income_grplife_exp 可能有一定的相关性。

  1. 通过使用 tm_facetsby 参数分割空间数据,下面这个例子是以省份为依据画出的各省男性人口所占比例的分面图。

例子

tmap_mode("plot") ##创建一个静态图
data(NLD_muni) ##加载数据
## 展示部分数据
##code         name   province   population pop_men pop_women  pop_0_14  pop_15_24 pop_25_44
##0 0003   Appingedam Groningen      12065    5845      6215       15        11        22
##1 0005        Bedum Groningen      10495    5245      5245       17        12        21
##2 0007 Bellingwedde Groningen       8920    4450      4470       14        10        19
##3 0009     Ten Boer Groningen       7480    3730      3750       20        11        22
##4 0010     Delfzijl Groningen      25695   12860     12835       15        11        21
##5 0014    Groningen Groningen     198315   98425     99890       12        24        30

NLD_muni$perc_men <- NLD_muni$pop_men / NLD_muni$population * 100 ##定义要展示的变量

tm_shape(NLD_muni) +
  tm_polygons("perc_men", palette = "RdYlBu") +
  tm_facets(by = "province") ##按照省份分割数据画出分面图

创建分面的第二种方式

  1. 也可使用 tmap_arrange 函数创建分面图,下面这个例子是将同一数据分别创建关于人口的多边形图和气泡图。

例子

tmap_mode("plot")
data(NLD_muni)
tm1 <- tm_shape(NLD_muni) + tm_polygons("population", convert2density = TRUE) ##创建多边形图分面
tm2 <- tm_shape(NLD_muni) + tm_bubbles(size = "population") ##创建气泡图分面

tmap_arrange(tm1, tm2)

创建分面的第三种方式

2.3 底图和覆盖图

底图可使用 tm_basemap 函数添加,半透明的覆盖图(例如注释、标签等)可使用 tm_tiles 函数添加。

data("World") ##加载数据
tmap_mode("view")  ##创建一个交互式地图
tm_basemap("Stamen.Watercolor") + ##添加底图
  tm_shape(metro) + tm_bubbles(size = "pop2020", col = "red") + ## 画出城市点,气泡大小表示人口数
  tm_tiles("Stamen.TonerLabels") ##添加注释、标签

添加底图和覆盖图

放大版上图

3. 图像保存

使用 tmap_save() 函数保存 tmap 创建的图像,需要指定 HTML 文件(view 模式)或图像(plot 模式)的名称。

例如

tm <- tm_shape(World) +
  tm_polygons("HPI", legend.title = "Happy Planet Index")

## save as stand-alone HTML file ("view" mode)
tmap_save(tm, filename = "world_map.html")

## save an image ("plot" mode)
tmap_save(tm, filename = "world_map.png")

小编有话说

  • 本篇主要介绍 《Geospatial Health Data》 一书中 tmap 包和函数的基本使用方法并进一步对其中的内容进行了扩展。
  • 本篇是空间地理数据可视化系列的第三期,主要由 林华师 制作。本系列的宗旨是带你系统学习如何使用 R 对空间地理数据进行可视化。下一期将会继续介绍 leaflet 包的使用,敬请期待。

参考资料

[1]

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

推荐: 可以保存以下照片,在 b 站扫该二维码,或者 b 站搜索【庄闪闪】观看 Rmarkdown 系列的视频教程。Rmarkdown 视频新增两节视频(写轮眼幻灯片制作)需要视频内的文档,可在公众号回复【rmarkdown

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

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

原始发表时间:2021-08-28

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

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

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

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

    庄闪闪
  • 可视化流式地理空间数据

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

    代码医生工作室
  • R可视乎|空间地理数据可视化(1)

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

    庄闪闪
  • 实验3 地理空间数据可视化

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

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

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

    磐创AI
  • R-tmap 绘制带指北针和比例尺的空间地图

    昨天有小伙伴在讨论群里提问"有没有关于绘制带比例尺和指北针的地图可视化教程",我也进行了答复,没想到关注的人比较多,那就安排推文教程(最近在系统整理资料,所以这...

    DataCharm
  • R-tmap 绘制带指北针和比例尺的空间地图

    昨天有小伙伴在讨论群里提问"有没有关于绘制带比例尺和指北针的地图可视化教程",我也进行了答复,没想到关注的人比较多,那就安排推文教程(最近在系统整理资料,所以这...

    气象学家
  • 使用R语言对进行地理空间数据可视化

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

    拓端
  • R-ggspatial+ggplot2 实现带指北针和比例尺的空间地图绘制

    继上次使用tmap包制作含有指北针(compass)和比例尺(scale bar)以及南海小地图的添加,详细内容分别见如下两篇文章:R-tmap 绘制带指北针和...

    DataCharm
  • R-tmap+grid 实现南海小地图的添加

    在推出一篇使用R-tmap绘制带有「指北针(compass)」 和「比例尺(scale bar)」 的教程图文哦,有很多小伙伴私信说“解决了好久没解决的问题,而...

    DataCharm
  • R和Python空间数据处理(3):R地图绘制之tmap

    本次实例需要用到的R包较多,plot()函数创建静态地图的最快方法.本次重点介绍tmap,它是一个功能强大且灵活的地图制作包。它有一个简明的语法,允许用最少...

    陈南GISer
  • 【直播回顾】轻松入门数据可视化

    https://appqtulvsie4217.pc.xiaoe-tech.com/detail/l_5e5dd4cfd2ef3_4Ramdutd/4?from...

    数据小磨坊
  • 【实战】用 WebGL 创建一个在线画廊

    本文中所用到的大多数套路也可以用在其他 WebGL 库中,例如 Three.js[2] 或 Babylon.js[3] 中,但是需要一些小小的调整。

    疯狂的技术宅
  • UE4中的单映射:TMap容器

    一、TMap<T>是么 TMap<T>是UE4中的一种关联容器,每个键都关联着一个值,形成了单映射关系。因此你可以通过键名来快速查找到值。此外,单映射要求每...

    用户1198337
  • UE4 反射系统详细剖析

    使用UE4的同学一定对"*.generated.h"这个名字不陌生。蓝图、HotReload等功能都依赖于反射机制。本文会从生成代码分析UE4的反射系统是如何实...

    阿苏勒
  • UE Modules:Find the DLL and load it

    在Windows上,UE的模块在非IS_MONOLITHIC(打包成一个单独的可执行文件的单片模式(Monolithic))模式下,是通过查找DLL来加载模块的...

    查利鹏
  • 绘图技巧 | “变形”地图可视化绘制方法

    今天的推文给大家介绍一个可以绘制”变形“地图的可视化包-R-cartogram包,改包可以使绘制地图时某些区域的几何形状进行扭曲变化,可以更好的传递地图表达的信...

    DataCharm
  • 客户端-CephFS监控埋点

    ceph daemon /var/run/ceph/ceph-client.admin.asok status

    Lucien168

扫码关注云+社区

领取腾讯云代金券