相关文章推荐
好帅的苦咖啡  ·  R包:gtable包用于处理ggplot2图 ...·  2 年前    · 
好帅的苦咖啡  ·  ggplot2 - 知乎·  2 年前    · 
好帅的苦咖啡  ·  与ggplot2 包相关的109 ...·  2 年前    · 
好帅的苦咖啡  ·  ggplot2包图形参数(坐标轴、分面、配色 ...·  2 年前    · 
好帅的苦咖啡  ·  空间地理数据可视化之ggplot2 ...·  2 年前    · 
小百科  ›  空间地理数据可视化之ggplot2 包及其拓展开发者社区
ggplot2 地理 空间数据 数据可视化
好帅的苦咖啡
2 年前
作者头像
庄闪闪
0 篇文章

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

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 庄闪闪的R语言手册 > 空间地理数据可视化之 ggplot2 包及其拓展

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

作者头像
庄闪闪
发布 于 2021-08-20 17:11:46
1.4K 0
发布 于 2021-08-20 17:11:46
举报

点击下方公众号,回复资料分享,收获惊喜

前言

上次 R 可视乎主要讲述了 《Geospatial Health Data》[1] 一书中关于 空间地理数据可视化 用 R 包制作地图的基础内容,参见 R可视乎|空间地理数据可视化(1) 。本篇将继续介绍空间地理数据可视化的 R 包和函数。

众所周知,地图对于传达地理空间信息非常有用,我们将介绍一些简单的例子,展示一些在 R 语言中常用于制图的包,即 ggplot2 、 tmap 、 leaflet 和 mapview 等。

本篇将主要介绍 ggplot2 包及函数的用法以及它的拓展( gganimate 和 plotly 包)。

1. 基本画图设置

ggplot2[2] 是一个基于图形语法来创建图形的包,因此我们可以使用 ggplot() 函数和以下元素创建一个图:

  • 想要可视化的数据;
  • 指定数据的几何形状,如点或条。形状是用 geom_*() 函数指定的,例如, geom_point() 用于表示点, geom_histogram() 用于表示柱状图;
  • 几何对象的美化,如颜色、大小等。其中, aes() 用于将数据中的变量映射为对象的视觉属性;
  • 可选的元素,如标尺、标题、标签、图例和主题等。

我们可以使用 geom_sf() 函数和一个简单特征对象( sf 类)来创建地图。如果可用的数据是 SpatialPolygonsDataFrame 类的空间对象,可以用 sf 包的 st_as_sf() 函数轻松地将其转换为 sf 类的简单特征对象。

例子 :创建一个 1974 年北卡罗来纳州婴儿猝死的地图,如下所示(其中 map 数据可在上篇公众号( R可视乎|空间地理数据可视化(1) )第 4 部分 图形文件 中找到相关代码):

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

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

2. 更多设置

  1. 在 ggplot() 中,离散变量的默认色标是 scale_*_hue() ,这里 * 表示 颜色 (为点和线等特征着色)或 填充 (为多边形或柱状图着色);
  2. scale_*_grey() 用来改变灰色颜色的默认比例, scale_*_distiller() 、 scale_*_brewer() 使用 RColorBrewer 包的颜色(Neuwirth 2014), scale_*_viridis 使用 viridis 包的颜色(Garnier 2018);
  3. 可用 scale_*_manual() 手动定义我们自己的颜色集,此函数有一个逻辑参数叫 drop ,用来决定是否在尺度中保留不常用的因子水平;
  4. 连续变量的颜色刻度可以用 scale_*_gradient() 来指定,它在两种颜色(低-高)之间创建一个连续的梯度, scale_*_gradient2() 创建一个发散的颜色梯度(低-中-高), scale_*_gradientn() 创建一个 n 种颜色的梯度。

如果你是 可视化的 R 小白 ,推荐你看一下庄小编的 ggplot 可视化教程 ,课件如下: R分享|自制112页可视化课件 。在公众号回复: 可视化文稿 即可免费获得,对应的视频教程见 b站 。

下图是用 viridis 包中的 scale_*_distiller() 函数和 ggplot() 函数绘制的 1974 年北卡罗来纳州婴儿猝死的地图:

例子 :

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

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

3. 图像保存

要保存用 ggplot2 绘制的图,我们可以使用 ggsave() 函数。另外,我们也可以通过指定一个设备驱动(如 png 、 pdf )来保存绘图,打印绘图,然后用 dev.off() 关闭设备。

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

4. 内容扩展

gganimate 包[3] 和 plotly 包[4] 可以与 ggplot2 包结合使用,分别创建动画和交互式绘图。

4.1 gganimate 包

一个典型的例子是使用 gapminder 数据集创建的动画,其中 transition_time() 是核心函数,添加动态。

例子 :

library(ggplot2)
library(gganimate)
library(gapminder)
head(gapminder)

我们使用 gapminder 数据集做一个简单的例子,前 6 行数据如下所示:

前 6 行数据

接下来我们根据不同情况进行数据可视化。

以年份的形式进行动画演示 :

theme_set(theme_bw())
p <- ggplot(gapminder,
            aes(x = gdpPercap, y=lifeExp, size = pop, colour = country)) +
  geom_point(show.legend = FALSE, alpha = 0.7) +
  scale_color_viridis_d() +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  labs(x = "GDP per capita", y = "Life expectancy")
p + transition_time(year) + labs(title = "Year: {frame_time}")

用 gapminder 数据集创建的动画

将数据点作为背景 :

加入参数 shadow_mark(alpha = 0.3, size = 0.5) ,使得数据点作为动画演示的背景。

p + transition_time(year) + 
    labs(title = "Year: {frame_time}") + 
    shadow_mark(alpha = 0.3, size = 0.5)

将数据点作为背景后的动画

按大陆创建分面 :

使用 facet_wrap(~continent) ,创造分面。

p + facet_wrap(~continent) +
  transition_time(year) +
  labs(title = "Year: {frame_time}") 

按大陆创建分面后的动画

4.2 plotly 包

R 的 plotly 包是一个基于浏览器的交互式图表库,它建立在开源的 JavaScript 图表库 plotly.js 之上。它通过 HTML widgets 框架完全在本地上运行,把结果上传到 plotly 账户,可以查看交互图及相应的数据,并进行修改。 plotly 与 ggplot2 结合,可创建交互式地图,实现放大、缩小、移动等操作。

例子1 :

我们还是使用原来那个地图作为例子,这时候使用 ggplotly() 将其转化为一个可交互的图形。

library(plotly) 
library(ggplot2) 
library(viridis)
library(sf)
map <- st_as_sf(map)
p2 <- ggplot(map) + geom_sf(aes(fill = SID74)) +
  scale_fill_viridis() + theme_bw()
ggplotly(p2)
 
推荐文章
好帅的苦咖啡  ·  R包:gtable包用于处理ggplot2图像-腾讯云开发者社区-腾讯云
2 年前
好帅的苦咖啡  ·  ggplot2 - 知乎
2 年前
好帅的苦咖啡  ·  与ggplot2 包相关的109 种拓展包-腾讯云开发者社区-腾讯云
2 年前
好帅的苦咖啡  ·  ggplot2包图形参数(坐标轴、分面、配色)整理-腾讯云开发者社区-腾讯云
2 年前
好帅的苦咖啡  ·  空间地理数据可视化之ggplot2 包及其拓展-腾讯云开发者社区-腾讯云
2 年前
Link管理   ·   Sov5搜索   ·   小百科
小百科 - 百科知识指南