前言
本篇 R
可视化将继续介绍 《Geospatial Health Data》[1] 中用 R
包制作地图的相关内容,使用的包是 tmap
,创建出来的图像多种多样、十分漂亮!
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年北卡罗来纳州婴儿猝死的地图
tmap 包除了可以生成灵活的专题地图外,还允许创建具有多个形状和图层的可视化、创建分面等。
下面的一个例子是使用 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)
多个形状和图层的世界地图
使用 tmap 创建分面主要有以下三种方式:
aesthetic
设置多个变量,在下面这个例子中是 tm_polygons
函数的第一个参数。例子:
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
参数分割空间数据,下面这个例子是以省份为依据画出的各省男性人口所占比例的分面图。例子:
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
函数创建分面图,下面这个例子是将同一数据分别创建关于人口的多边形图和气泡图。例子:
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)
创建分面的第三种方式
底图可使用 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") ##添加注释、标签
添加底图和覆盖图
放大版上图
使用 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")
R
对空间地理数据进行可视化。下一期将会继续介绍 leaflet
包的使用,敬请期待。[1]
《Geospatial Health Data》: https://www.paulamoraga.com/book-geospatial/sec-spatialdataandCRS.html
推荐: 可以保存以下照片,在 b 站扫该二维码,或者 b 站搜索【庄闪闪
】观看 Rmarkdown 系列的视频教程。Rmarkdown 视频新增两节视频(写轮眼幻灯片制作)需要视频内的文档,可在公众号回复【rmarkdown
】