[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)]
& b5 A& F# k" O |2 s7 U[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)]
2 L- P4 r5 O, D7 b; L( p; q. m[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)]
' l, N9 X7 K, o4 [% M) C[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)]
7 C4 W' c$ g! d1 S[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)]二、新增确诊病例变化趋势#由累计确诊病例计算新增确诊病例, p% a. M0 _' e# S1 Q2 Y
inspect_lag_data<-cbind(0,inspect_data[,1
ncol(inspect_data)-1)])% _/ h. R! t2 P+ q( d
increase_data<-inspect_data-inspect_lag_data
g( M4 Y$ C: B1 Z! H3 {" @9 \" t+ d, f
#合并数据,new_data为新增确诊人数数据: n8 S9 { I7 R7 v
new_data<-cbind(information_data,increase_data)
, c2 N, r0 l4 G9 t6 O) W! K/ j4 _1 O, _- K; M
1. 中国新增确诊病例变化趋势
& Y# m8 w) q. k2 i$ g! ^#合并所有省份新增确诊人数5 n% i& e2 U' |" G1 k( I
china<-new_data[new_data$`Country/Region`=='China',]' Z. J5 D5 b9 R' C" x# v1 H0 {, a
china_increase<-data.frame(apply(china[,-c(1:4)],2,sum))' i# N: |/ ~, q, q9 e1 X/ l! J
colnames(china_increase)<-'increase_patient'* \& G) F k9 ^ w) s8 p$ ]
china_increase$date<-as.Date(rownames(china_increase),format="%Y-%m-%d")0 n9 M' }, c7 R1 X* M" A
( Z) G4 V! ?4 f0 f
ggplot(china_increase,aes(x=date,y=increase_patient,color='新增确诊人数'))+geom_line(size=1)+
' O# H6 ^7 y: r( u6 e( b, o8 }. m4 | scale_x_date(date_breaks = "14 days")+ #设置横轴日期间隔为14天(注意:此时的date列必须为日期格式!)
3 d1 S, T$ `$ K6 X8 y labs(x='日期',y='新增确诊人数',title='2020年1月22日-2020年12月7日中国新增确诊人数变化趋势图')+
( i% W# M# ^: J; F% D theme_economist()+ #使用经济学人绘图样(式ggthemes包)
, y, y; i( b) v* T+ G8 {9 S2 k8 k theme(plot.title = element_text(face="plain",size=15,hjust=0.5),% p [* A! t3 G! a' M
axis.title.x = element_blank(),
: z; Q9 g; F1 m4 b2 V. \* d0 e axis.title.y = element_text(size=15),1 e, W0 _6 B# Q7 P( i
axis.text.x = element_text(angle = 90,size=15),
, {: _# n% l3 i' X6 U3 }: `( R7 k% d axis.text.y = element_text(size=15),
$ J# X" T7 R) Z; z legend.title=element_blank(),
2 C, j8 e9 W1 N% e0 Y3 i7 }& n legend.text=element_text(size=15))0 w8 J- v4 i- b! ?! S: Y2 p
9 ], u' Y4 u6 K' o% F 
4 z/ v; J1 `7 b* F2. 美国新增病例变化趋势
$ K: H$ G/ o! ]! T* p/ P+ c$ [us<-new_data[new_data$`Country/Region`=='United States',]1 a7 ?3 M! O+ O: O5 b
us_increase<-gather(us,key="date",value="increase_patient",'2020-01-22':'2020-12-07')9 ^" s' Q, R6 s7 Y8 u' V
us_increase$date<-as.Date(us_increase$date)
8 y8 Y+ x# q. xggplot(us_increase,aes(x=date,y=increase_patient,color='新增确诊人数'))+geom_line(size=1)+1 \* m# C) K2 O; ?8 o8 J8 C
scale_x_date(date_breaks = "14 days")+ #设置横轴日期间隔为14天: j, A# j# U3 w: u3 V1 U
labs(x='日期',y='新增确诊人数',title='2020年1月22日-2020年12月7日美国新增确诊人数变化趋势图')+$ ]! z5 D8 f! G6 q# g. V0 F4 m% H
theme_economist()+ #使用经济学人绘图样(式ggthemes包)9 L m" ?/ L n3 G
theme(plot.title = element_text(face="plain",size=15,hjust=0.5),5 J' U: u+ R+ W! J6 H" r4 N' z
axis.title.x = element_blank(),
' D: G2 r- g5 C7 |5 u axis.title.y = element_text(size=15),
J0 X! z2 F, O1 F' T- f( S- p axis.text.x = element_text(angle = 90,size=15),
R7 W) n9 `% ~& I, q3 T5 l- q5 \ axis.text.y = element_text(size=15),
: q5 u- J. |6 P legend.title=element_blank(),, a4 ~) a e4 r3 p
legend.text=element_text(size=15))
- m. F* x# U+ K7 t5 H. l
' u& |7 E1 m8 T9 Q* T( S
$ @" K: {$ l0 i1 ?5 w: d; y" L3. 全球新增病例变化趋势 g' L( E- B; a" z9 x9 j
total_increase<-data.frame(apply(new_data[,-c(1:4)],2,sum))
6 ], n( Y+ P- u# d5 jcolnames(total_increase)<-'increase_patient'
0 W$ E7 l l. Y1 a2 g/ @" stotal_increase$date<-as.Date(rownames(total_increase),format="%Y-%m-%d")
! N3 r* H, K2 K. W- dggplot(total_increase,aes(x=date,y=increase_patient,color='新增确诊人数'))+geom_line(size=1)++ H! p9 ?' m1 ?* g
scale_x_date(date_breaks = "14 days")+
3 `2 q" j0 j5 J labs(x='日期',y='新增确诊人数',title='2020年1月22日-2020年12月7日全球新增确诊人数变化趋势图')+
1 g% L6 m! [8 i4 K: G3 a0 r% u9 b theme_economist()+
# g4 y( i+ X5 b6 k4 a9 k# c% m' u scale_y_continuous(limits=c(0,8*10^5), #考虑数字过大,以文本形式标注y轴标签
8 N8 w* C* t6 F3 s2 z }) E% l; P breaks=c(0,2*10^5,4*10^5,6*10^5,8*10^5),
+ c% x. l M# i2 `, n) e8 Q labels=c("0","20万","40万","60万","80万"))+5 j* a) C% Z. B% B
theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
" I* v4 h) G, W( O axis.title.x = element_blank(),
3 ~ X' g, l4 Q" [& _: B axis.title.y = element_text(size=15),, Q* ^& O+ B" R+ T$ g
axis.text.x = element_text(angle = 90,size=15),
4 p5 Z; K5 i! w3 \6 @& O axis.text.y = element_text(size=15),% b. f9 U8 l4 Z8 r, i
legend.title=element_blank(),
Y5 M# X) ]1 N2 ^' E$ D* t! R. Z; f legend.text=element_text(size=15))
/ |* H: y9 u$ f1 w7 ?
% O$ Q$ K$ `5 H1 ]4 @7 E ]
# d# N3 F& P3 q$ g' J' e1 A9 h5 U三、新增确诊病例全球地理分布
8 R v$ ]5 `' Q; U9 \mapworld<-borders("world",colour = "gray50",fill="white")
3 }( G/ M* d& C1 Mggplot()+mapworld+ylim(-60,90)+0 z+ Q4 K) | o* o, v, S4 M: w b
geom_point(aes(x=new_data$Long,y=new_data$Lat,size=new_data$`2020-01-22`),color="darkorange")+
+ ^6 P0 R. D& ^9 I& | scale_size(range=c(2,9))+labs(title="2020年1月22日全球新增确诊人数分布")+
7 J: j/ }* a+ ?4 E) T( [7 w+ b4 P e theme_grey(base_size = 15)+
8 L# ~: b7 _4 _$ n+ \ theme(plot.title=element_text(face="plain",size=15,hjust=0.5),3 j5 U/ H) p# Y6 A3 P
legend.title=element_blank())4 a* g0 r! b. I1 @9 E H
7 U a, {/ J) O: eggplot()+mapworld+ylim(-60,90)+
& g; C" j, [- Y# m$ z geom_point(aes(x=new_data$Long,y=new_data$Lat,size=new_data$`2020-11-22`),color="darkorange")+6 B( p: u6 ]/ ?+ N) o
scale_size(range=c(2,9))+labs(title="2020年11月22日全球新增确诊人数分布")+; h' W0 t4 @- l' F4 E4 o" J
theme_grey(base_size = 15)+9 |" q; t+ ?, T2 A4 r: G
theme(plot.title=element_text(face="plain",size=15,hjust=0.5),& E0 ? t/ K& W1 s; [
legend.title=element_blank())
( t, i; ]8 r# C: F, a& J& c. C5 l. w; H# l$ Y

1 d$ e, l' T8 B; S1 Y
四、累计确诊病例动态变化图1. 至12月7日全球累计病例确诊人数前十国家
/ i0 e4 l& U% P1 n! Y: K
cum_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))
+ `" `* X% k& c8 d6 Q) h
2. 五国(India、Brazil、Russia、Spain、Italy)累计确诊病例动态变化图
1 e/ x# j) a7 J& \cum_patient_time<-gather(data,key="date",value="increase_patient",'2020-01-22':'2020-12-07')
; y1 [6 p* h) g; }, ncolnames(cum_patient_time)<-c("
rovince","Country","Lat","Long","date","increase_patient")! b% v( v2 m0 W, ^6 T* ]' \: S
five_country<-subset(cum_patient_time,Country %in% c("India","Brazil","Russia","Spain","Italy"))
+ Y6 i1 }3 u6 q- M4 dfive_country$date<-as.Date(five_country$date)$ W0 W4 s+ j C0 x. U
9 ~8 v8 }; m2 A2 {& u5 q/ _, aggplot(five_country, % I$ R7 G8 Q5 r: `
aes(x=reorder(Country,increase_patient),y=increase_patient, fill=Country,frame=date)) +
( ~( C- u$ t( G6 g, V, z, s geom_bar(stat= 'identity', position = 'dodge',show.legend = FALSE) +
" U# O+ x* x' C7 @7 r! s geom_text(aes(label=paste0(increase_patient)),col="black",hjust=-0.2)+
4 @ y5 |5 s* q6 Z scale_fill_brewer(palette='Set3')+ #使用Set3色系模板
/ ~6 K; f: H& c7 s" @0 I theme(legend.position="none",% |) l* G# B6 |0 k( o
panel.background=element_rect(fill='transparent'),( Y# J- L! R7 \. w! f; L
axis.text.y=element_text(angle=0,colour="black",size=12,hjust=1),
5 X% c+ M" o! {! C0 X, M9 P3 K panel.grid =element_blank(), #删除网格线% `, l5 L5 c, b6 m1 ^1 v/ E
axis.text = element_blank(), #删除刻度标签
+ g# U J$ K5 O2 g! | axis.ticks = element_blank(), #删除刻度线
* G3 R5 l; J) o% t. c3 P; I# t )+
: w% }- M2 K4 v$ D0 A- B+ R4 F coord_flip()+
4 j* e+ v* E$ n2 b/ ~ transition_manual(frames=date) + #动态呈现( p2 z0 G) ~- W' |
labs(title = paste('日期:', '{current_frame}'),x = '', y ='五国累计确诊病例增长')+ ) o5 R: k, ]: R7 V/ E; T
theme(axis.title.x = element_text(size=15))+
( m5 F# p. ^" x7 L) O t: p. c- b: D$ \ ease_aes('linear') ) O j6 G v; I
9 D$ \4 [$ ~3 {* s$ j, S/ X$ Janim_save(filename = "五国累计确诊病例增长动态图.gif")+ ^1 X4 f$ z" N* M
3 n! t& r* }4 i& `7 V5 A4 M" y! T
! J' c: N, S' u$ }, ~
2 u3 n* F$ h+ ~$ u' x# ^