[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)]
" B. \( {+ Y8 j6 e( F9 X6 U# E) C8 t[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)]7 u* N+ k, h0 V7 a3 Z T0 s# N
[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)]
, p0 s- `4 \7 Z0 `0 ^( q X[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)]2 j# h2 g$ T9 P+ T- g- b+ U
[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)]二、新增确诊病例变化趋势#由累计确诊病例计算新增确诊病例, u7 y/ c8 `& g2 z
inspect_lag_data<-cbind(0,inspect_data[,1
ncol(inspect_data)-1)])
; p1 c9 B# A# U2 wincrease_data<-inspect_data-inspect_lag_data, k4 \! P- x3 B
3 J8 l) R- {+ q
#合并数据,new_data为新增确诊人数数据
/ D& O: u0 g" V. x8 c+ J9 X5 wnew_data<-cbind(information_data,increase_data)
* T+ m& ^! A1 v/ ~5 l0 Y# Y9 O4 K4 s: W
1. 中国新增确诊病例变化趋势1 N4 V F H2 ^) i6 |! F( i7 E
#合并所有省份新增确诊人数/ ]1 }% V, o0 w
china<-new_data[new_data$`Country/Region`=='China',]5 F |/ Z* V- P" c5 N
china_increase<-data.frame(apply(china[,-c(1:4)],2,sum))+ n b3 }+ Z$ [+ J
colnames(china_increase)<-'increase_patient'# ^% [! A8 e# m r, W9 Y4 k% t
china_increase$date<-as.Date(rownames(china_increase),format="%Y-%m-%d")! k( J4 e8 |3 l
1 U/ O4 j. m& w1 bggplot(china_increase,aes(x=date,y=increase_patient,color='新增确诊人数'))+geom_line(size=1)+' S& i1 P3 H6 P5 a" G. p2 p8 F
scale_x_date(date_breaks = "14 days")+ #设置横轴日期间隔为14天(注意:此时的date列必须为日期格式!)
) r, c$ e) Y5 Y5 X labs(x='日期',y='新增确诊人数',title='2020年1月22日-2020年12月7日中国新增确诊人数变化趋势图')+& |1 a6 }. @% E: m8 l1 k
theme_economist()+ #使用经济学人绘图样(式ggthemes包)/ v$ s' z9 S* i' s d- F) |
theme(plot.title = element_text(face="plain",size=15,hjust=0.5),4 l+ K- ?( M7 Y
axis.title.x = element_blank(),
$ ~ A0 d, W% b5 R( Z% i, L4 k' P axis.title.y = element_text(size=15),' f. _% c2 ?0 B7 p `# `, [
axis.text.x = element_text(angle = 90,size=15),0 j5 G: s5 E* }. H* \6 B" U* ]
axis.text.y = element_text(size=15),
4 X3 K6 v6 x* B0 @6 f- r, O legend.title=element_blank(),
% K+ d; z8 ?5 l' j! T8 a legend.text=element_text(size=15))1 S9 F+ T h1 o; B3 T
# ^% a, i% p+ G/ b I1 A- w# E
& ~5 |+ h7 U5 [4 r. h& A; u5 w
2. 美国新增病例变化趋势
6 m* s w7 c1 gus<-new_data[new_data$`Country/Region`=='United States',]: L: T" a" W# l- n6 w) G7 L
us_increase<-gather(us,key="date",value="increase_patient",'2020-01-22':'2020-12-07')
6 u" |& f4 R: ^- A. O# C- `us_increase$date<-as.Date(us_increase$date)
; Y- G# j/ b7 X8 N- [ggplot(us_increase,aes(x=date,y=increase_patient,color='新增确诊人数'))+geom_line(size=1)+" Q5 X+ _1 u, h* j0 q# K j, j
scale_x_date(date_breaks = "14 days")+ #设置横轴日期间隔为14天
. a0 R8 J& F( h* n5 L- L4 ?/ | labs(x='日期',y='新增确诊人数',title='2020年1月22日-2020年12月7日美国新增确诊人数变化趋势图')+) W* j5 T& a5 i; M2 [. Q2 ]
theme_economist()+ #使用经济学人绘图样(式ggthemes包)
7 M$ O8 A& e$ j) f9 U) c theme(plot.title = element_text(face="plain",size=15,hjust=0.5),
5 ~, c- }" |! q6 K4 g) c4 ] axis.title.x = element_blank(),2 q5 i. j+ }0 ~$ ]8 L, T
axis.title.y = element_text(size=15),+ b' n$ D# _, K, @3 g1 [
axis.text.x = element_text(angle = 90,size=15),# k0 @5 S/ s. v% { q: n* d) }
axis.text.y = element_text(size=15),2 @5 b; |1 S$ I9 t0 `1 p# A @
legend.title=element_blank(),
2 O" Y2 z M7 E3 x4 ~* _ legend.text=element_text(size=15))
, }$ {! B0 @6 V% R8 o
/ J4 @8 @8 x6 e* `# b7 I, W
6 I) V* m5 i" f, K3. 全球新增病例变化趋势
( N( j/ x2 j ]& @total_increase<-data.frame(apply(new_data[,-c(1:4)],2,sum))# x" e5 s0 u% p& h
colnames(total_increase)<-'increase_patient'
" e% P; c4 {7 u6 n' Ctotal_increase$date<-as.Date(rownames(total_increase),format="%Y-%m-%d")
?* g. u! X) Y a# rggplot(total_increase,aes(x=date,y=increase_patient,color='新增确诊人数'))+geom_line(size=1)+
$ `4 l0 @) k2 S5 P* P* k8 M6 \ scale_x_date(date_breaks = "14 days")+
9 ]' f! ]6 v5 P ~7 K labs(x='日期',y='新增确诊人数',title='2020年1月22日-2020年12月7日全球新增确诊人数变化趋势图')+& u9 | P' |( s/ z; O- N. ?
theme_economist()+4 `: ?+ o5 V4 V1 K' G1 p
scale_y_continuous(limits=c(0,8*10^5), #考虑数字过大,以文本形式标注y轴标签
1 v, s0 _( P" ~ breaks=c(0,2*10^5,4*10^5,6*10^5,8*10^5),; n: f2 c* J, v1 a/ e1 D
labels=c("0","20万","40万","60万","80万"))+
1 ~: q1 U5 j$ w- w% F theme(plot.title = element_text(face="plain",size=15,hjust=0.5),- F5 ? L( I* {
axis.title.x = element_blank(),
- M/ |5 v" B+ D axis.title.y = element_text(size=15),
. h! T+ m+ W# X; l! C) R' L: `9 m axis.text.x = element_text(angle = 90,size=15),
) N, K N+ C& j/ Y t# n6 W axis.text.y = element_text(size=15),, [. M6 l8 c* C6 @
legend.title=element_blank(),
, I4 j' m) n9 }8 t legend.text=element_text(size=15))
1 _% q+ i( X) Y- N* Q6 ]/ t) \$ s* T" I

: k2 U, d% Z0 e! ^三、新增确诊病例全球地理分布* I0 D1 |$ ]. ], r
mapworld<-borders("world",colour = "gray50",fill="white")
# ~* g3 k5 X( U. cggplot()+mapworld+ylim(-60,90)+
' K7 g: x% g7 C: G# `; |4 E geom_point(aes(x=new_data$Long,y=new_data$Lat,size=new_data$`2020-01-22`),color="darkorange")+- D+ z( s, P7 D2 B. T2 }
scale_size(range=c(2,9))+labs(title="2020年1月22日全球新增确诊人数分布")+
+ O% l# c. Q, f. N5 Y# n+ b theme_grey(base_size = 15)+
$ f: c/ @; L! n/ H5 A theme(plot.title=element_text(face="plain",size=15,hjust=0.5),0 e% R# D& g) @* T' r
legend.title=element_blank())
' U7 H/ h7 i( S6 }4 V( w0 z5 w3 _ Q' w+ v
ggplot()+mapworld+ylim(-60,90)+
( j9 C* A1 z8 E$ O$ j( ~ geom_point(aes(x=new_data$Long,y=new_data$Lat,size=new_data$`2020-11-22`),color="darkorange")+
5 _7 _. I# u. M2 U, d3 T scale_size(range=c(2,9))+labs(title="2020年11月22日全球新增确诊人数分布")+9 Q4 U8 O8 u0 A1 w E- H
theme_grey(base_size = 15)+- h' h) ]2 c8 _$ w& f3 o& v: x4 K
theme(plot.title=element_text(face="plain",size=15,hjust=0.5),
& o* u' Y: `% l/ o legend.title=element_blank())0 U1 h8 k; j( H/ c, W
! t. ]- N2 l2 h8 y$ K7 p/ L

' d6 e- [6 |& V! m3 d# [7 q
四、累计确诊病例动态变化图1. 至12月7日全球累计病例确诊人数前十国家
6 i( u7 V6 B- P9 ?7 v% W
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))

2 x: f7 V( P$ ?- g5 f2. 五国(India、Brazil、Russia、Spain、Italy)累计确诊病例动态变化图, ]. L0 @4 |# p5 ~6 M* b2 `
cum_patient_time<-gather(data,key="date",value="increase_patient",'2020-01-22':'2020-12-07')
. f2 @4 V0 \+ d5 Hcolnames(cum_patient_time)<-c("
rovince","Country","Lat","Long","date","increase_patient")
5 T8 W5 c* {' c( y: }( ofive_country<-subset(cum_patient_time,Country %in% c("India","Brazil","Russia","Spain","Italy"))
^& ?0 t/ e# ?3 t, L/ _five_country$date<-as.Date(five_country$date)! k" C: X/ ~8 A \
! c# I- Y+ n6 q4 ~# Y: u
ggplot(five_country, . d p) t7 E( t9 p: H7 C$ M2 q' Z! ~
aes(x=reorder(Country,increase_patient),y=increase_patient, fill=Country,frame=date)) + : h, o/ [- Q4 y0 A
geom_bar(stat= 'identity', position = 'dodge',show.legend = FALSE) + 0 |* s8 `" m4 I4 n( u
geom_text(aes(label=paste0(increase_patient)),col="black",hjust=-0.2)+ . m/ `; P8 H/ T$ d/ C
scale_fill_brewer(palette='Set3')+ #使用Set3色系模板
, ?& r+ R$ F) y/ y theme(legend.position="none",) D) I5 E9 X u! |
panel.background=element_rect(fill='transparent'),
6 d6 ~( L5 R- E, D axis.text.y=element_text(angle=0,colour="black",size=12,hjust=1),
4 v7 `4 Z% y: _ panel.grid =element_blank(), #删除网格线
9 [0 s) W+ j: X: W' P1 S axis.text = element_blank(), #删除刻度标签
$ e! }9 W8 Q K5 E axis.ticks = element_blank(), #删除刻度线
3 j/ P% r& H# J4 b# g+ q! d )+
: | o3 w$ F6 r! d4 y7 T coord_flip()+
$ `% F; r3 n* Y. j5 ~ transition_manual(frames=date) + #动态呈现
: {6 Y! _* f% a- D6 U# } labs(title = paste('日期:', '{current_frame}'),x = '', y ='五国累计确诊病例增长')+ 0 L+ v R0 B2 ?3 d' b: z- }; w
theme(axis.title.x = element_text(size=15))+$ T7 Y6 ^! G+ j7 w
ease_aes('linear') 8 H8 Q3 W2 Z; m# ?+ V! X
8 G/ D/ }8 y# s: Canim_save(filename = "五国累计确诊病例增长动态图.gif")9 i. g, W9 v- l1 ]. b: d2 O
- {1 `5 \( o- y# m
6 a7 p* ~6 d# D* i- P
, z- G! ]4 Y; ~