新冠肺炎疫情的发展 —— 使用 R 语言绘制动态图表

新冠肺炎疫情的发展 —— 使用 R 语言绘制动态图表

昨天我介绍了如何使用 R 语言绘制动态图表,今天我们再来练习一下。不如我们就绘制一些动态图表展示这一个多月的新冠肺炎疫情的发展趋势吧!

首先可以从知识星球下载本文所需的数据,两个:

  1. 全国数据.xlsx:包含了 1 月 11 号到昨天的全国和武汉的疫情数据;
  2. 省级数据.xlsx:包含了 1 月 12 号到今天上午的各省疫情数据数据;

动态柱状图

首先我们加载需要的一些 R 包:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

我想先根据全国数据.xlsx数据绘制一幅动态图表,下面我们把这个数据读进 R 里面然后再整理一下:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

kind 是我特意生成用来指明这个观测值是全国的还是武汉的。由于这里的 value 有缺失值,我们把数据框里面的所有缺失值替换成 0:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

我之前介绍过 ggchicklet 这个包,可以用于绘制圆角的柱形图,下面我们使用 gganimate 包绘制动态柱状图:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

我们昨天还介绍了使用 plotly 绘制动态图表,不过需要注意的是 plotly 里面并没有设计 geom_chicklet 图层,所以这里我们只能使用 geom_col 图层:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

动态地图

新冠肺炎疫情动态地图之前也绘制过好多次了,不过都是使用先绘制静态图然后再使用一些命令行工具合成动态图的方法绘制的,这里我们完全使用 gganmiate 试试。

首先把 省级数据.xlsx 和我们需要的地图数据读入 R 中:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

本来我是直接使用这个 provmap 绘制地图,结果出现了很多缺失,这个因为 省级数据.xlsx 里面有缺失。这个缺失是这种情况:例如 2020 年 1 月 12 日这天只有几个省有数据,导致我们在绘制这天的地图的时候就只绘制出这几个省,所以有必要进行填充,就是我们得保证每天的数据都有 34 个观测值,为此我采用下面的方法。

首先生成一个 crossing 的数据框,这个数据框就是 $34 \times 45$ 的,45 是日期数,然后再把这个“完备”的数据框和上面的 provmap 进行连接:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

注意到上面的数据框里面有确诊数量为 NA 和 -Inf 的,NA 是因为本来就缺失,-Inf 则是因为这里的确诊数量已经被我通过 mutate(日期 = ymd(日期), 确诊 = log(确诊)) 操作变成了对数确诊数量,而 log(0) 就是 -Inf,为了绘图的需要我们还是把这些观测值替换成 0 吧(虽然不太合理,因为对数确诊数量为 0 对应的确诊数量应该是 1,这里仅供演示)。

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

然后就是绘图了:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

好了,通过这个示例练习一下是不是感觉对 gganimate 的使用有所感觉了呢?

知识星球附件链接:https://t.zsxq.com/JaUf6Ae

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×