![30ea9433b3310c240e85530acb801e32.png](https://i-blog.csdnimg.cn/blog_migrate/e402038eb6c011a63dc3bfa8b32a7ee0.jpeg)
原创:hxj7
本文用gganimate包展示模拟疫情数据
本文篇幅较长,分为以下几个部分:
- 前言
- 效果展示
- 小结
- 附录:代码
前言
前文《R语言模拟疫情传播-RVirusBroadcast》已经介绍了一种用R语言模拟疫情传播的方法,不过当时为了实时模拟数据(没有事先准备好的数据集可用)的动态展示效果,笔者在RVirusBroadcast中使用的是R中的基础作图功能,在本文中我们将用gganimate包来生成动态图。
gganimate包是一个可以在ggplot作图基础上生成动态图的工具,像ggplot作图一样,使用gganimate包要先把数据集准备好。由于gganimate的运算量较大,所以只模拟了30天的数据。
效果展示
请注意下面的gif动图都是模拟生成的,纯属虚构,不具有现实意义,仅供电脑模拟实验所用。
当人们随意移动时
![8d6a1d7c1998a9c482f3b40dbf21d7d6.gif](https://i-blog.csdnimg.cn/blog_migrate/b283f941c6c51135c1fd6c846aee63a2.gif)
![13fbb8590e89e4e445e84ac76492f9cb.gif](https://i-blog.csdnimg.cn/blog_migrate/ac32925286e138f17cf6df499e5dcc1a.gif)
上面两张图是gganimate包生成的gif动图,利用magick包还可以将两张动图组合起来:
![d5a565aa78ba1ccd3f587b91c81fe26f.gif](https://i-blog.csdnimg.cn/blog_migrate/9b618d95403077598962d1071741bfc9.gif)
当人们控制自己的移动时
![ed785ce7946daddae8d3d238542c6f43.gif](https://i-blog.csdnimg.cn/blog_migrate/8fed5392ebf5828e6d08a8d2da4dd755.gif)
![a6fab592e4cca0d9bb081a6e241703b1.gif](https://i-blog.csdnimg.cn/blog_migrate/419f0d2aea020a38c80cf2d245259ea9.gif)
![754891904a703a917e03f6663eacda0a.gif](https://i-blog.csdnimg.cn/blog_migrate/4c1032e4bf0728d7ab256e4a0d1165d1.gif)
小结
- 与RVirusBroadcast程序用基础画图功能来动态展示数据不同的是,gganimate包是在ggplot作图的基础上生成动图的,它需要事先准备好数据集。
- 利用gganimate + magick可以组合动态图。
- gganimate还可以做很多有意思的事情,有兴趣的朋友可以到官网上去看一看。
参考
[1] “计算机仿真程序告诉你为什么现在还没到出门的时候” 视频地址:https://www.bilibili.com/video/av86478875?spm_id_from=333.788.b_765f64657363.1
[2] VirusBroadcast (Java)程序源码:https://github.com/KikiLetGo/VirusBroadcast
[3] gganimate包项目链接:https://github.com/thomasp85/gganimate
附录:代码
###name:RVirusBroadcast-via-gganimate
###author:hxj7
###version:202002010
###note:本程序是"VirusBroadcast (in Java)"的R-动画版本,只能处理事先准备好的数据集
### VirusBroadcast (in Java) 项目链接:
### https://github.com/KikiLetGo/VirusBroadcast/tree/master/src
library(tibble)
library(dplyr)
library(ggplot2)
library(tidyr)
library(magick)
library(gganimate)
########## 模拟参数 ##########
ORIGINAL_COUNT <- 50 # 初始感染数量
BROAD_RATE <- 0.8 # 传播率
SHADOW_TIME <- 140 # 潜伏时间,14天为140
HOSPITAL_RECEIVE_TIME <- 10 # 医院收治响应时间
BED_COUNT <- 1000 # 医院床位
MOVE_WISH_MU <- -0.99 # 流动意向平均值,建议调整范围:[-0.99,0.99];
# -0.99 人群流动最慢速率,甚至完全控制疫情传播;
# 0.99为人群流动最快速率, 可导致全城感染
CITY_PERSON_SIZE <- 5000 # 城市总人口数量
FATALITY_RATE <- 0.02 # 病死率,根据2月6日数据估算(病死数/确诊数)为0.02
SHADOW_TIME_SIGMA <- 25 # 潜伏时间方差
CURED_TIME <- 50 # 治愈时间均值,从入院开始计时
CURED_SIGMA <- 10 # 治愈时间标准差
DIE_TIME <- 300 # 死亡时间均值,30天,从发病(确诊)时开始计时
DIE_SIGMA <- 50 # 死亡时间标准差
CITY_WIDTH <- 700