前言
本篇 R
可视化将继续介绍 《Geospatial Health Data》[1] 中用 R
包制作地图的相关内容,使用的包是 tmap
,创建出来的图像多种多样、十分漂亮!
1. 基本画图设置
tmap 包被用来生成具有极大灵活性的专题地图,创建地图的语法类似于 ggplot2 ,这种地图是通过使用 tm_shape()
函数和用 tm_*()
函数添加图层来创建的。此外,我们可以通过分别设置 tmap_mode("plot")
和 tmap_mode("view")
来创建静态或交互式地图。下面举出一个用 tmap 创建交互式地图的例子。
例子 :
代码语言:javascript复制library(tmap)
tmap_mode("view") ##使用的数据是前两期用过的 map
tm_shape(map) tm_polygons("SID74")
tmap 创建的1974年北卡罗来纳州婴儿猝死的地图
2. 内容扩展
tmap 包除了可以生成灵活的专题地图外,还允许创建具有多个形状和图层的可视化、创建分面等。
2.1 多个形状和图层
下面的一个例子是使用 tmap 包创建的一个多个形状和图层的世界地图,其中不同的颜色分布代表不同的海拔高度。
例子:
代码语言:javascript复制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 创建分面主要有以下三种方式:
- 通过对
aesthetic
设置多个变量,在下面这个例子中是tm_polygons
函数的第一个参数。
例子:
代码语言:javascript复制tmap_mode("view") ##创建一个交互式地图,可实现同步移动和放缩
tm_shape(World)
tm_polygons(c("income_grp", "life_exp"))
tm_facets(sync = TRUE, ncol = 2)
创建分面的第一种方式
在这个例子中,可通过地图的颜色分布初步观察到 income_grp
和 life_exp
可能有一定的相关性。
- 通过使用
tm_facets
的by
参数分割空间数据,下面这个例子是以省份为依据画出的各省男性人口所占比例的分面图。
例子:
代码语言:javascript复制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") ##按照省份分割数据画出分面图
创建分面的第二种方式
- 也可使用
tmap_arrange
函数创建分面图,下面这个例子是将同一数据分别创建关于人口的多边形图和气泡图。
例子:
代码语言:javascript复制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
模式)的名称。
例如:
代码语言:javascript复制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
】