其他
R语言制作全国疫情系列图
01
全国分省疫情统计
—
由于数据是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)
#新增确诊=0
ProvData2 =
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")
p7
NoHubeiData =
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")
p8
grid.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的位置画图p1
print(p8, vp = vplayout(2,1)) ###将(2,1)的位置画图p2
本文有关数据和代码提供百度网盘分享:
链接:https://pan.baidu.com/s/1CMROm-s0Fm78b46qjOf0Tg
提取码:5mkz
本公众号中其它文章共享资料请打赏获取