2.4 Making maps with R --INLA处理地理空间健康数据

地图对于传达地理空间信息非常有用。在此,我们介绍一些简单的例子,展示一些常用的软件包的使用。
在R中常用于制图的一些包,即ggplot2、leaflet、mapview和tmap。在本书的其余部分,我们将展示如何使用ggplot2和leaflet包创建更复杂的地图,以可视化几个应用程序的结果。

  • 2.4.1 ggplot2
    ggplot2(https://ggplot2.tidyverse.org/)是一个基于图形的语法来创建图形的包。这意味着我们可以使用ggplot()函数和以下元素来创建一个图。
  1. 我们想要可视化的数据。

  2. 代表数据的几何形状,如点或条。形状是用geom_*()函数来指定的。例如,geom_point()用于表示点,geom_histogram()用于表示柱状图。

  3. aes()用于将数据中的变量映射到对象的视觉属性,如颜色、大小、形状和位置。

  4. 可选的元素,如比例尺、标题、标签、图例和主题。

我们可以通过使用geom_sf()函数并提供一个简单的特征(sf)对象来创建地图。注意,如果可用的数据是SpatialPolygonsDataFrame类的空间对象,我们可以用sf包的st_as_sf()函数轻松地将其转换为sf类的简单特征对象。例如,我们可以创建一个1974年北卡罗来纳州婴儿猝死的地图(SID74),如下(图2.8)。

library(ggplot2) 
map <- st_as_sf(map) 
ggplot(map) + geom_sf(aes(fill = SID74)) + theme_bw()

在这里插入图片描述

在ggplot()中,离散变量的默认色标是scale__hue()。这里表示颜色(为点和线等特征着色)或填充(为多边形或柱状图着色)。我们可以通过使用scale_grey()来改变默认比例,scalebrewer()使用RColorBrewer包的颜色(Neuwirth, 2014),scaleviridis(discrete = TRUE)则使用viridis包的颜色(Garnier, 2018)。我们也可以用scalemanual()手动定义我们自己的颜色集。请注意,这个函数有一个逻辑参数叫drop,用来决定是否在尺度中保留不常用的因子水平。连续变量的颜色标度可以用scalegradient()来定义,它在两种颜色(低-高)之间创建一个连续的梯度,scalegradient2()创建一个发散的颜色梯度(低-中-高),scalegradientn()创建一个n种颜色的梯度。我们还可以使用scaledistiller()和scale*_viridis()来分别使用RColorBrewer和viridis包的颜色。我们可以用viridis比例尺绘制SID74的地图,如下所示(图2.9)。

library(viridis) 
map <- st_as_sf(map) 
ggplot(map) + geom_sf(aes(fill = SID74)) + scale_fill_viridis() + theme_bw()

在这里插入图片描述

要保存由ggplot2生成的图形,可以使用ggsave()函数。或者,我们可以通过指定设备驱动程序(例如,png, pdf)来保存plot,打印plot,然后使用dev.off()关闭设备:

png("plot.png") 
ggplot(map) + geom_sf(aes(fill = SID74)) + scale_fill_viridis() + theme_bw() 
dev.off()

此外,软件包ganimate(Pedersen和Robinson,2019)和plotly(Sievert等人,2019)可以与ggplot2结合使用,分别创建动画图和互动图。

  • 2.4.2 leaflet

Leaflet 2是一个非常流行的用于交互式地图的开源JavaScript库。R包leaflet(https://rstudio.github.io/leaflet/)使得在R中集成和控制Leaflet地图变得容易。我们可以通过调用leaflet()函数来创建一个地图,然后通过使用层函数向地图添加层。例如,我们可以使用addTiles()来添加一个背景地图,addPolygons()来添加多边形,addLegend()来添加一个图例。我们可以使用各种背景图。例子可以在图例提供者的网站上看到3。一个SID74的地图,其色阶由RColorBrewer包的调色板 "YlOrRd "给出,可以按如下方法创建。首先,我们将具有EPSG代码4267的投影的地图转换为EPSG代码4326的投影,这是leaflet要求的投影。我们通过使用sf包的st_transform()函数来实现这一目的。

st_crs(map)

结果:
Coordinate Reference System:

EPSG: 4267 proj4string: “+proj=longlat +datum=NAD27 +no_defs”

map <- st_transform(map, 4326)

然后,我们使用colorNumeric()创建一个调色板,并使用leaflet(), addTiles()和addPolygons()函数绘制地图,指定多边形的边框颜色(color)和多边形的颜色(fillColor),不透明度(fillOpacity)和图例(图2.10)。

library(leaflet)
pal <- colorNumeric("YlOrRd", domain = map$SID74)

leaflet(map) %>%
	addTiles() %>% 
	addPolygons(
		color = "white", fillColor = ~ pal(SID74),
		fillOpacity = 1 
	) %>% 
	addLegend(pal = pal, values = ~SID74, opacity = 1)

在这里插入图片描述

要将创建的映射保存到HTML文件中,我们可以使用htmlwidgets包的saveWidget()函数(Vaidyanathan等人,2018)。如果我们希望保存地图的图像,我们首先用saveWidget()将其保存为HTML文件,然后使用webshot包的webshot()函数捕获HTML的静态版本(Chang, 2018)。

  • 2.4.3 mapview

mapview包(https://r-spatial.github.io/mapview/)允许非常快速地创建交互式可视化,以研究数据中的空间几何和变量。例如,我们可以创建一个显示SID74的地图,只需使用mapview()函数,参数映射对象和我们想要显示的变量(zcol = “SID74”)(图2.11)。这个地图是交互式的,通过点击每个县,我们可以看到弹出的数据中其他变量的信息。

library(mapview) 
mapview(map, zcol = "SID74")

在这里插入图片描述

Mapview非常方便,可以非常快速地检查空间数据,但创建的地图也可以通过添加图例和背景地图等元素来定制。此外,我们可以创建显示多个层和合并同步的可视化效果。例如,我们可以创建一个背景地图“CartoDB”的地图。来自RColorBrewer包的调色板“YlOrRd”的颜色如下所示(图2.12):

library(RColorBrewer) 
pal <- colorRampPalette(brewer.pal(9, "YlOrRd")) 
mapview(map,zcol = "SID74",map.types = "CartoDB.DarkMatter",col.regions = pal )

在这里插入图片描述

我们还可以使用sync()函数来生成一个网格状的视图,该视图包含多个用mapview或leaflet创建的同步地图。首先使用mapview()创建变量SID74和SID79的地图,然后将这些地图作为sync()函数的参数传递(图2.13),通过同步缩放和平移创建1974年和1979年婴儿猝死的地图。

m74 <- mapview(map, zcol = "SID74") 
m79 <- mapview(map, zcol = "SID79") 
m <- sync(m74, m79) 
m

在这里插入图片描述
我们可以保存使用mapview创建的地图,方式与使用传单创建的地图相同(使用saveWidget()和webshot())。或者,地图可以使用mapshot()函数保存为HTML文件或PNG、PDF或JPEG图像。

  • 2.4.4 tmap
    tmap包用于生成具有极大灵活性的专题地图。映射是通过使用tm_shape()函数和使用tm_*()函数添加图层来创建的。此外,我们可以通过分别设置tmap_mode(“plot”)和tmap_mode(“view”)来创建静态或交互式映射。例如,可以创建如下的SID74交互式地图(图2.14):
library(tmap) 
tmap_mode("view") 
tm_shape(map) + tm_polygons("SID74")

在这里插入图片描述
这个包还允许创建具有多个形状和层的可视化效果,并指定不同的样式。要保存使用tmap创建的地图,可以使用tmap_save()函数,其中需要指定HTML文件的名称(视图模式)或图像(绘图模式)。有关tmap的更多信息可以在包的小插图4中看到。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android a'la'b语言包是一种特殊的语言包,旨在帮助开发人员在Android平台上处理某些特定的语言需求。a'la'b语言包是一个应用程序库,提供了丰富的工具和函数,使得在Android应用程序中处理多种语言变得更加简便。 首先,a'la'b语言包提供了一种简单而强大的方式来实现多语言支持。它允许开发人员轻松地将应用程序的用户界面和文本翻译成多种语言,从而使应用程序能够更好地与全球用户进行沟通。开发人员只需简单地添加文本资源文件,并在其中提供不同语言的翻译,a'la'b语言包就可以自动识别用户的语言设定,并显示相应语言的界面。 其次,a'la'b语言包还提供了丰富的本地化工具和函数,使得开发人员能够更好地处理语言相关的问题。例如,它提供了日期和时间格式化的功能,用于将日期和时间转换为各种语言和地区的标准格式。此外,它还提供了字符串处理和文本翻译的功能,开发人员可以轻松地对应用程序的文本进行处理和翻译。 另外,a'la'b语言包还包含一些针对特定语言需求的特殊功能。例如,它提供了针对阿拉伯语和希伯来语等从右到左书写的语言的支持,使得开发人员能够轻松地处理这些特殊的书写需求。它还提供了针对东亚语言(如中文、日语和韩语)的特殊处理功能,用于解决这些语言在字形、标点和换行等方面的特殊要求。 总而言之,Android a'la'b语言包是一个强大的工具,可用于帮助开发人员处理Android应用程序的多语言需求。它提供了简单而强大的多语言支持功能,并提供了丰富的本地化工具和函数,使开发人员能够更好地处理语言相关的问题。无论是处理简单的翻译还是处理复杂的本地化需求,a'la'b语言包都是一个不可或缺的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangboy666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值