Translate

2019年12月25日水曜日

◆レーシング・バーチャート作成の「R」のコードの例です

 インフルエンザの「週別の定点当たり報告数」のレーシング・バーチャートを作成する「R」のコードの例です。ランキングによって、棒グラフの位置が入れ替わるタイプのアニメーションのグラフを作成するためのコードです。

 まず、ランキングの推移の動きを出すためには、データの前処理として、ランキングの列を追加する必要があります。データの数値を表示させるためには、スコア表示用の数字の列を追加する必要があります。
 スコア表示用の数字の列を作成せずに、「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 件のコメント:

コメントを投稿