查看原文
其他

R语言制作全国疫情系列图

走天涯徐小洋 走天涯徐小洋地理数据科学 2022-05-17
 最近一直在制作和分析疫情数据,好久没大规模的使用R语言了,好多函数方法都忘了,这几天用了用,大大提高了每天出报告的效率。

使用R语言绘图前,首先分析数据,把数据整理为R语言方便读取的结构和格式,格式首选csv,其次xlsx

本文配合下面文章使用,效果更佳:
如何使用ArcGIS制作疫情分布图
R语言安装部署基础
使用AI和R语言的综合制图方法
R语言资料汇总



01


全国分省疫情统计



先看全国分省的疫情统计数据,表名“分省汇总.xlsx”,分为9个字段,时间、代码、地区、新增确诊、累计确诊、新增死亡、累计死亡、新增治愈、累计治愈。


数据准备好后,首选用R语言读取准备好的数据。
由于数据是EXCEL格式,在这里用到readxl包。
时间字段在R中需要进行特别声明,在这里使用ymd函数将时间字段进行转换,转换成R语言可以识别的格式。为了计算在医院的病例数,这里建立了一个InHospital向量,计算完成后使用cbind函数和Daydata数据框合并。
R语言引用了很多包,在这里首先将会用到的包全部加载上。readxl读取EXCEL包,lubridate日期函数包,ggplot2大名鼎鼎的绘图包,grid是用于划分格网包(用于一幅图上放好几个小图)。
library(readxl)library(lubridate)library(ggplot2)library(grid)Daydata <- read_excel(path = "分省汇总.xlsx", sheet= 1, col_names= T)Daydate <- ymd(Daydata$时间)Daydata <- cbind(Daydata, Daydate)InHospital <- Daydata$累计确诊-Daydata$累计死亡-Daydata$累计治愈Daydata <- cbind(Daydata, InHospital)


02


全国每日新增确诊人数折线图


绘制全国每日新增确诊人数折线图:

首先需要从总的数据中挑选出全国数据,根据代码为86的行挑选即可。

#全国整体数据和图Chinadata <- Daydata[Daydata$代码==86,]  #筛选出全国数据#绘制新增确诊图p1 <- ggplot(Chinadata, aes(Daydate, 新增确诊, color=代码))+ labs(x="时间", y="新增确诊人数")+ theme(axis.title = element_text(size = 20), #调整标题大小 axis.text.x = element_text(size = 18), #x轴标签大小 axis.text.y = element_text(size = 18))+ #y轴标签大小 geom_line(color="#FF6699")+ geom_point(color="#FF6699")p1


03


新增确诊为0省份数变化图

分省数据整理,并绘制新增确诊为0的省份数变化图:


首先从整体数据中将各省数据筛选出来,通过代码不等于86即可筛出

在这里使用dplyr包进行数据的分类汇总

筛选条件是新增确诊等于0

按日期分组

统计新增确诊等于0的省份个数

#分省数据整理ProvData <- Daydata[Daydata$代码!=86,]library(dplyr)#新增确诊=0ProvData2 = ProvData%>% filter(新增确诊==0)%>% group_by(Daydate)%>% summarise(n())ProvData2#绘制新增确诊为0省份图p6 <- ggplot(ProvData2, aes(Daydate, `n()`))+ labs(x="时间", y="新增确诊为0省份数")+ theme(axis.title = element_text(size = 20), #调整标题大小 axis.text.x = element_text(size = 18), #x轴标签大小 axis.text.y = element_text(size = 18))+ #y轴标签大小 geom_line()+ geom_point()p6


04


湖北/非湖北省份新增确诊病例变化图


绘制湖北省、非湖北省份新增确诊病例变化图:

前文中已经将各省数据提取到了ProvData数据框中

接下来要分别对湖北省和非湖北省份的新增确诊病例进行分别统计

首先就要分出湖北省和非湖北省的数据

同样根据代码进行区别,湖北省的代码为420000

非湖北省的只需不等于420000即可

湖北省的新增病例可以直接根据新增病例字段进行制图

非湖北省份由于是多个省份新增确诊病例总数,需要进行一个求和操作

在这里同样进行一个分类汇总

根据新增确诊不等于0进行汇总

按照时间Daydate进行分组

执行求和sum操作

然后是进行制图

在这里将湖北省、非湖北省两个图使用grid包进行了拼图

具体代码如下:

#湖北,非湖北省级数据分析HubeiData <- ProvData[ProvData$代码==420000, ]NoHubei <- ProvData[ProvData$代码!=420000, ]p7 <- ggplot(HubeiData, aes(Daydate, 新增确诊, color=代码))+ labs(x="时间", y="新增确诊人数", title="湖北省新增确诊病例变化图")+ theme(title = element_text(size = 22), axis.title = element_text(size = 20), #调整标题大小 axis.text.x = element_text(size = 18), #x轴标签大小 axis.text.y = element_text(size = 18))+ #y轴标签大小 geom_line(color="#F6B352")+ geom_point(color="#F6B352")p7NoHubeiData = NoHubei%>% filter(新增确诊!=0)%>% group_by(Daydate)%>% summarise(sum(新增确诊)) #对各省新增确诊病例求和p8 <- ggplot(NoHubeiData, aes(Daydate, `sum(新增确诊)`))+ labs(x="时间", y="新增确诊人数", title="非湖北省份新增确诊病例变化图")+ theme(title = element_text(size = 22), axis.title = element_text(size = 20), #调整标题大小 axis.text.x = element_text(size = 18), #x轴标签大小 axis.text.y = element_text(size = 18))+ #y轴标签大小 geom_line(color="#F68657")+ geom_point(color="#F68657")p8grid.newpage() ##新建页面pushViewport(viewport(layout = grid.layout(2,1))) ####将页面分成2*1矩阵vplayout <- function(x,y){ viewport(layout.pos.row = x, layout.pos.col = y)}print(p7, vp = vplayout(1,1)) ###将1的位置画图p1print(p8, vp = vplayout(2,1)) ###将(2,1)的位置画图p2


本文有关数据和代码提供百度网盘分享:

链接:https://pan.baidu.com/s/1CMROm-s0Fm78b46qjOf0Tg

提取码:5mkz


本公众号中其它文章共享资料请打赏获取


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存