[color=rgba(0, 0, 0, 0.749019607843137)]#加载本次可视化所需包[color=rgba(0, 0, 0, 0.749019607843137)]library(readr) [color=rgba(0, 0, 0, 0.749019607843137)]library(sp) #地图可视化[color=rgba(0, 0, 0, 0.749019607843137)]library(maps) #地图可视化[color=rgba(0, 0, 0, 0.749019607843137)]library(forcats)[color=rgba(0, 0, 0, 0.749019607843137)]library(dplyr)[color=rgba(0, 0, 0, 0.749019607843137)]library(ggplot2)[color=rgba(0, 0, 0, 0.749019607843137)]library(reshape2) [color=rgba(0, 0, 0, 0.749019607843137)]library(ggthemes) #ggplot绘图样式包[color=rgba(0, 0, 0, 0.749019607843137)]library(tidyr)[color=rgba(0, 0, 0, 0.749019607843137)]library(gganimate) #动态图[color=rgba(0, 0, 0, 0.749019607843137)]
; J1 O- U7 h* g& v6 {- X G[color=rgba(0, 0, 0, 0.749019607843137)]#一、国家名词整理[color=rgba(0, 0, 0, 0.749019607843137)]data<-read_csv('confirmed.csv')[color=rgba(0, 0, 0, 0.749019607843137)]data[data$`Country/Region`=='US',]$`Country/Region`='United States'[color=rgba(0, 0, 0, 0.749019607843137)]data[data$`Country/Region`=='Korea, South',]$`Country/Region`='Korea'[color=rgba(0, 0, 0, 0.749019607843137)]
+ t! o. ]. O) @! H8 u3 ^2 ]- _[color=rgba(0, 0, 0, 0.749019607843137)]information_data<-data[,1:4] #取出国家信息相关数据[color=rgba(0, 0, 0, 0.749019607843137)]inspect_data<-data[,-c(1:4)] #取出确诊人数相关数据[color=rgba(0, 0, 0, 0.749019607843137)]
/ A# {8 Z* x6 i* O% ^) Q( q$ e[color=rgba(0, 0, 0, 0.749019607843137)]#二、日期转换[color=rgba(0, 0, 0, 0.749019607843137)]datetime<-colnames(inspect_data)[color=rgba(0, 0, 0, 0.749019607843137)]pastetime<-function(x){[color=rgba(0, 0, 0, 0.749019607843137)] date<-paste0(x,'20')[color=rgba(0, 0, 0, 0.749019607843137)] return(date)[color=rgba(0, 0, 0, 0.749019607843137)]}[color=rgba(0, 0, 0, 0.749019607843137)]datetime1<-as.Date(sapply(datetime,pastetime),format='%m/%d/%Y')[color=rgba(0, 0, 0, 0.749019607843137)]colnames(inspect_data)<-datetime1[color=rgba(0, 0, 0, 0.749019607843137)]% M/ _" W$ }& V' P( q& ~
[color=rgba(0, 0, 0, 0.749019607843137)]#合并数据,data为累计确诊人数数据(预处理后)[color=rgba(0, 0, 0, 0.749019607843137)]data<-cbind(information_data,inspect_data)[color=rgba(0, 0, 0, 0.749019607843137)]二、新增确诊病例变化趋势#由累计确诊病例计算新增确诊病例
2 D5 X% ?6 S- }! m8 [" Dinspect_lag_data<-cbind(0,inspect_data[,1
ncol(inspect_data)-1)]). _9 d$ G8 i( r* B( Y! U3 k% A
increase_data<-inspect_data-inspect_lag_data
5 L% n, j: Q4 q7 h
, j; W4 y$ y( R# f& I#合并数据,new_data为新增确诊人数数据
2 R) ^' |. r2 @new_data<-cbind(information_data,increase_data)
0 s* y' C% r' h) L1 U V( g9 I' b0 ]
1. 中国新增确诊病例变化趋势
& v% P- _* _$ u$ |" i* G. u#合并所有省份新增确诊人数: A. F! e# q( U7 a: G
china<-new_data[new_data$`Country/Region`=='China',]$ v. w; o" Z8 r9 N7 k# J4 b
china_increase<-data.frame(apply(china[,-c(1:4)],2,sum)) k1 f2 b, E! T! }1 M, Y6 @+ }: I" p
colnames(china_increase)<-'increase_patient'
% K/ p' K$ g% i, n3 M7 Pchina_increase$date<-as.Date(rownames(china_increase),format="%Y-%m-%d")0 d9 C9 |- k- P6 K6 i: W
1 q$ Q0 _5 l! E4 D; {ggplot(china_increase,aes(x=date,y=increase_patient,color='新增确诊人数'))+geom_line(size=1)+6 f, B2 P/ O6 f- V' K4 ^
scale_x_date(date_breaks = "14 days")+ #设置横轴日期间隔为14天(注意:此时的date列必须为日期格式!)/ z; Z5 @9 Q! C+ @4 a" X! k1 d
labs(x='日期',y='新增确诊人数',title='2020年1月22日-2020年12月7日中国新增确诊人数变化趋势图')+' }; F9 a2 k2 H4 ~. h( V
theme_economist()+ #使用经济学人绘图样(式ggthemes包)1 \! c) t9 D+ E% h. L% D) g5 _5 b( Z
theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
' X- F4 \9 P& v- U4 J7 w1 v c axis.title.x = element_blank(),
2 z0 E! ^: K; D: r6 h( } axis.title.y = element_text(size=15),
* I5 k, Y( f J axis.text.x = element_text(angle = 90,size=15),& n7 H) j7 y6 p; B8 e
axis.text.y = element_text(size=15),% f0 R# A3 r% L4 Q& a: |" l) K
legend.title=element_blank(),
* P8 {! l( a1 t* u& G legend.text=element_text(size=15))
/ N, `8 q5 h3 r3 \1 ? T
; f( N- \0 A. v
( X: y( L9 u: c- g6 y+ y% h7 b. K0 S6 E
2. 美国新增病例变化趋势
, |9 T8 Z u& e- a! C- R0 w8 Ous<-new_data[new_data$`Country/Region`=='United States',]5 d! L$ f7 j1 }5 L& B j9 V
us_increase<-gather(us,key="date",value="increase_patient",'2020-01-22':'2020-12-07') y& y7 |$ C9 \
us_increase$date<-as.Date(us_increase$date)9 M3 F6 H; n* ?% p% F4 v& R' ]0 Q& o
ggplot(us_increase,aes(x=date,y=increase_patient,color='新增确诊人数'))+geom_line(size=1)+
9 d' ^" ^+ I" A) N scale_x_date(date_breaks = "14 days")+ #设置横轴日期间隔为14天
9 S" N5 z1 K- M8 y8 x5 a7 c2 A2 ` labs(x='日期',y='新增确诊人数',title='2020年1月22日-2020年12月7日美国新增确诊人数变化趋势图')+7 o d# o/ \+ d7 D/ C
theme_economist()+ #使用经济学人绘图样(式ggthemes包)' h" [' K/ i$ R' K* S
theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
$ O( N- K z- l0 N& }1 b5 c axis.title.x = element_blank(),
# f: E- U: F; Y! `3 S axis.title.y = element_text(size=15),
1 k( G" E. j) F# i H* G axis.text.x = element_text(angle = 90,size=15),
[) Z! P# ~6 P3 l' N2 c axis.text.y = element_text(size=15),
- p5 M) I+ z5 f+ [ legend.title=element_blank(),% k! U5 }! X" u) y- z
legend.text=element_text(size=15))" D8 O: B3 N* X0 q
& Y- R' z- }8 Z3 ]7 F) R
3 R9 e( f8 a- ~0 O4 ^$ \8 ?
3. 全球新增病例变化趋势9 d1 M/ E' O8 V
total_increase<-data.frame(apply(new_data[,-c(1:4)],2,sum))8 E6 H- J* Z9 }1 O
colnames(total_increase)<-'increase_patient', t7 F) L, p; E
total_increase$date<-as.Date(rownames(total_increase),format="%Y-%m-%d")
1 P9 X: F6 }, L) P! c" Fggplot(total_increase,aes(x=date,y=increase_patient,color='新增确诊人数'))+geom_line(size=1)+6 G% H5 c9 G- O" M4 _* S
scale_x_date(date_breaks = "14 days")+
2 u, Q, k+ @( s! X labs(x='日期',y='新增确诊人数',title='2020年1月22日-2020年12月7日全球新增确诊人数变化趋势图')+) e0 Y$ {1 k6 S' P3 v% w
theme_economist()+: @) E( A- {" w4 _. ?
scale_y_continuous(limits=c(0,8*10^5), #考虑数字过大,以文本形式标注y轴标签
+ M2 R2 B$ H+ |8 d- \ breaks=c(0,2*10^5,4*10^5,6*10^5,8*10^5),% H3 s$ {: t% o" |# V
labels=c("0","20万","40万","60万","80万"))+
; Q7 I' ]+ B* B2 `1 O$ Y9 s theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
: Y& K4 n; Q- h I5 ^4 G g! ` axis.title.x = element_blank(),+ I. g2 Z3 u6 x) V9 m" Q( J! ` w' y
axis.title.y = element_text(size=15),& v* e2 ~# G" v$ s5 V( ?
axis.text.x = element_text(angle = 90,size=15),
) c* b9 g9 L0 t% P9 m1 v axis.text.y = element_text(size=15),
* O3 I/ }7 p) m ?+ p' B legend.title=element_blank(),4 ?! ^4 S+ k* I& c$ _
legend.text=element_text(size=15))
[ d3 y0 r8 W4 m! z# V0 M1 ]: |2 w2 r( X
+ ^9 e$ p7 l; ^& E# c) [' m1 o* C
三、新增确诊病例全球地理分布
] R2 K; D% x+ zmapworld<-borders("world",colour = "gray50",fill="white")
$ }; \" F4 k- B! v0 x* ^/ Xggplot()+mapworld+ylim(-60,90)+8 e: D3 p" I% N
geom_point(aes(x=new_data$Long,y=new_data$Lat,size=new_data$`2020-01-22`),color="darkorange")+
, i2 k8 S5 t( {. R6 N scale_size(range=c(2,9))+labs(title="2020年1月22日全球新增确诊人数分布")+! W+ b( Q* T. ^8 d; T
theme_grey(base_size = 15)+
; F3 `; i, H4 T' ]9 u theme(plot.title=element_text(face="plain",size=15,hjust=0.5),
4 s7 p& A# a0 v' I4 t legend.title=element_blank())
0 }+ H2 a# i. k+ T! A4 T
- k& Z" ~5 K" p, S% }1 j9 I. z+ k1 V" ]ggplot()+mapworld+ylim(-60,90)+! L# I1 a: k# j
geom_point(aes(x=new_data$Long,y=new_data$Lat,size=new_data$`2020-11-22`),color="darkorange")+8 }+ d# f( q: Z2 B o
scale_size(range=c(2,9))+labs(title="2020年11月22日全球新增确诊人数分布")+
4 }% C: x' A1 R2 j theme_grey(base_size = 15)+! w9 Z4 d# I4 R7 C
theme(plot.title=element_text(face="plain",size=15,hjust=0.5),
+ `4 h' e! w! B+ z$ _, P9 k legend.title=element_blank())
' z$ y/ P6 G- U5 Y1 `( U, n5 t; K9 ^0 C( a. C4 [3 j, b


( Q9 B2 Q1 [% W) P. d+ d+ S3 D$ T四、累计确诊病例动态变化图1. 至12月7日全球累计病例确诊人数前十国家
+ j$ y9 F+ O$ y4 R. p. U* g/ wcum_patient<-data[c("Country/Region","2020-12-07")]
cum_patient<-cum_patient[order(cum_patient$`2020-12-07`,decreasing = TRUE),][1:10,]
colnames(cum_patient)<-c("country","count")
cum_patient<-mutate(cum_patient,country = fct_reorder(country, count))
cum_patient$labels<-paste0(as.character(round(cum_patient$count/10^4,0)),"万")
ggplot(cum_patient,aes(x=country,y=count))+
geom_bar(stat = "identity", width = 0.75,fill="#f68060")+
coord_flip()+ #横向
xlab("")+
geom_text(aes(label = labels, vjust = 0.5, hjust = -0.15))+
labs(title='至2020年12月7日累计确诊病例前十的国家')+
theme(plot.title = element_text(face="plain",size=15,hjust=0.5))+
scale_y_continuous(limits=c(0, 1.8*10^7))

. z" g% t% x9 c' W9 |+ B$ G3 G2. 五国(India、Brazil、Russia、Spain、Italy)累计确诊病例动态变化图3 J4 R% h1 n2 T' Q3 r0 Q. i+ S3 O
cum_patient_time<-gather(data,key="date",value="increase_patient",'2020-01-22':'2020-12-07')
1 i) t1 ]3 h$ z/ x. V) x: R2 ncolnames(cum_patient_time)<-c("
rovince","Country","Lat","Long","date","increase_patient"), E& m3 ]. x+ N4 r* w" X* G6 l: N
five_country<-subset(cum_patient_time,Country %in% c("India","Brazil","Russia","Spain","Italy"))
+ _7 Y( \6 t) F. _/ rfive_country$date<-as.Date(five_country$date) O. w- C1 V8 A% p; W
7 ?; ?% D" k) ~( l( M, [1 nggplot(five_country, 3 R' L3 V! }+ \4 n0 r; _$ ]) J
aes(x=reorder(Country,increase_patient),y=increase_patient, fill=Country,frame=date)) + 9 u" q( z9 z- H& [2 Z% g# J2 h
geom_bar(stat= 'identity', position = 'dodge',show.legend = FALSE) +
, I; k5 h# R: l+ w geom_text(aes(label=paste0(increase_patient)),col="black",hjust=-0.2)+ * e! V. t' {0 n, o6 r9 f5 B% }
scale_fill_brewer(palette='Set3')+ #使用Set3色系模板) J* \4 R' H1 w: R/ T
theme(legend.position="none",
! P% V8 H* P( p6 E4 E* }- C; |+ K panel.background=element_rect(fill='transparent'),
* M; Q4 S$ F+ ?8 S1 S axis.text.y=element_text(angle=0,colour="black",size=12,hjust=1),
1 q7 C( x9 w# a0 h- J& y8 ? panel.grid =element_blank(), #删除网格线: b X+ z8 c/ D, v
axis.text = element_blank(), #删除刻度标签
: S8 }: E# y; F8 r! ?: C5 t axis.ticks = element_blank(), #删除刻度线( z; b) X) _2 ]6 U
)+
9 X+ W8 v$ W) o( u4 @# d8 S x coord_flip()+
1 L1 Z& M1 ` e! d' Q" p transition_manual(frames=date) + #动态呈现
, S* X" W h7 |5 }8 o# ?, H. U labs(title = paste('日期:', '{current_frame}'),x = '', y ='五国累计确诊病例增长')+
( |" q5 Q4 |* {2 J7 \ theme(axis.title.x = element_text(size=15))+, W$ a: D, z, E% D0 D' F
ease_aes('linear') 2 u& W9 [" Z8 n2 \3 d8 U; r7 J
9 V& X5 y* k' K, U" K2 ]+ L/ o4 a3 b
anim_save(filename = "五国累计确诊病例增长动态图.gif")
" o! y( U' U# l8 B, v4 P; @2 W9 S2 o# O6 R
( [5 Z( P; c. S8 q# J5 G, {
n3 F) n2 ^' h- n/ Q! e) {