まず、ランキングの推移の動きを出すためには、データの前処理として、ランキングの列を追加する必要があります。データの数値を表示させるためには、スコア表示用の数字の列を追加する必要があります。
スコア表示用の数字の列を作成せずに、「geom_text(aes(y=influ,label = sprintf("%4.2f",influ))」といった形で表示させる方法もあるようです。
1)ランキングの推移をグラフのアニメーションに反映させるために、週別のランキングの列を追加します。
df_inftidyra <- df_inftidy %>% group_by(weeks) %>% mutate(rank = rank(-influ), Val_lab = paste0(" ",influ)) %>% group_by(year) %>% filter(rank <= 11)
2)整備したデータを基に、グラフを作成します。
grarank <-ggplot(df_inftidyra,aes(x = rank, group = year))+ geom_tile(aes(y=influ/2,height = influ,fill = year,width = 0.8))+labs(y="国立感染症研究所資料から",title="インフルエンザ_定点当たり報告数:Week:{closest_state}") + geom_text(x = -10, y = 48,aes(label = weeks), size = 14, col = "navy") + geom_text(aes(y = 0, label = paste(year, " ")), vjust = 0.2, hjust = 1, size = 8)+ geom_text(aes(y=influ,label = Val_lab, hjust=0),size = 5.5 ) + coord_flip(clip = "off", expand = TRUE) + scale_x_reverse() + theme_light() + theme(legend.position = 'none')
3)グラフの外観を整えます
grarank <- grarank + theme(axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_text(colour="navy", size=18),
axis.title.y=element_text(colour="navy", size=18),
legend.position="none",
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.grid.major.x = element_line( size=.1, color="grey" ),
panel.grid.minor.x = element_line( size=.1, color="grey" ),
plot.title=element_text(size=20, hjust=0.5, face="bold", colour="black", vjust=-1),
plot.background=element_blank(),
plot.margin = margin(0.5,0.5, 0.5, 3.5, "cm"))
4)アニメーションGIFのファイルを作成します
grarank <- grarank + transition_states(weeks, transition_length = 4, state_length = 1) + ease_aes('sine-in-out')+ enter_fade() + exit_fade()
gganimate::animate(grarank, nframes = 100, fps = 20, duration = 30, width = 720, height =480, renderer = gifski_renderer("anime_rank.gif"))
↓アニメーションを動画ファイルにしたものです。
---------------------------------------------------
-
0 件のコメント:
コメントを投稿