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

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

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

前言

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

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

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

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() 函数。另外,我们也可以通过指定一个设备驱动(如 pngpdf )来保存绘图,打印绘图,然后用 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 包

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

例子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)

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

例子2

或者使用该包自带的函数plot_ly()进行可视化。

library(plotly)
set.seed(100)
d <- diamonds[sample(nrow(diamonds), 1000), ]
plot_ly(d, x = ~carat, y = ~price, color = ~carat,size = ~carat, text = ~paste("Clarity: ", clarity))

poltly 创建的钻石的克拉数与价格之间的变动关系

小编有话说

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

参考资料

[1]

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

[2]

ggplot2: https://ggplot2.tidyverse.org/

[3]

gganimate 包: https://blog.csdn.net/weixin_45178611/article/details/108053035

[4]

plotly 包: https://my.oschina.net/u/2605101/blog/597871

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

可视化推文推荐

R可视乎|空间地理数据可视化(1)

R可视乎|用R给心仪的对象表白吧

R可视乎|棒棒糖图

R可视乎|合并多幅图形

R可视乎|等高线图

R可视乎|气泡图

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

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

    磐创AI
  • 空间数据可视化与simple future模型应用

    这是一篇关于关于空间地理信息数据可视化与simple feature 模型应用的笔记小结。

    数据小磨坊
  • 可视化中你最常用的软件包有哪些?

    看到很多答主都给出了全面的回答,包括数据处理,统计建模等方面。而在这篇推文中,我将对自己较为擅长的领域(R语言可视化)进行详细的介绍。

    庄闪闪
  • 【直播回顾】轻松入门数据可视化

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

    数据小磨坊
  • 30万字,“保姆级”可视化视觉设计优质学习攻略推荐

    首先,简单介绍一下作者,宁海涛是211硕士毕业,先后学习Python进行深度学习模型构建以及可视化展示,当然还包括数据分析、数据处理、数据可视化等技能,此外,还...

    小白学视觉
  • 左手用R右手Python系列12——空间数据可视化与数据地图

    以前我一直觉得Python的绘图工具与R语言ggplot2比起来,不够优雅,这也是我一直坚定的选择使用R+ggplot2深入的学习数据可视化的原因,ggplot...

    数据小磨坊
  • 使用R语言对进行地理空间数据可视化

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

    拓端
  • 如何处理地图投影转换

    最近学习地理信息可视化总是遇到投影的麻烦,包括前段时间输出两篇关于simple features的分享中,其中没有特别处理投影的问题,老司机一看就能看出其中存在...

    数据小磨坊
  • Kaggle | 使用Python和R绘制数据地图的十七个经典案例(附资源)

    大数据文摘
  • 12个ggplot2扩展包帮你实现更强大的可视化

    ggplot2自从2007年推出以来,成为世界范围内下载最频繁、使用最广泛的R包之一。许多人包括ggplot2的创建人Hadley Wickham将这一成功归功...

    生信宝典
  • 用Python绘制全国各省新型冠状病毒疫情状况

    本文使用数据说明:数据截至2月2日24时,累计报告确诊病例17205例,现有重症病例2296例,累计死亡病例361例,累计治愈出院475例。疑似病例21558例...

    博文视点Broadview
  • 12个ggplot2扩展包帮你实现更强大的可视化

    ggplot2自从2007年推出以来,成为世界范围内下载最频繁、使用最广泛的R包之一。许多人包括ggplot2的创建人Hadley Wickham将这一成功归功...

    1480
  • Python-geoplot 空间核密度估计图绘制

    由于对空间数据可视化的喜欢,可能本公众号的推文也以此类图较多,当然也受到小伙伴的喜欢。在R语言ggplot2以及其拓展包能够较为简单的实现各类空间可视化作品的绘...

    DataCharm
  • 「R」cowplot(一)介绍

    cowplot是ggplot2包的一个简单插件(或称拓展包),它的目的是为ggplot2提供一个出版级别的主题,使用少量代码即可实现主题统一的修改,如轴标签大小...

    王诗翔呀

扫码关注云+社区

领取腾讯云代金券