ただの折れ線グラフをみても、「はあ」となるだけですが、アニメ―ションを付けるとストーリーを付けやすいと思います。
Data visualization
Rで作ります。gganimateとtidyverseを使用します。
使用するデータ
日本にいると推定される猫と犬の数を使います。一般財団法人のペットフード協会さんが推測データを公表しています。
データは以下のような形です。
コード
まずは、普通に折れ線グラフを作成します。上記のそのままの形だと折れ線グラフを書けないので、reshape2でデータを適切な形にします。
library(tidyverse)
library(reshape2)
df <- read.csv("dogcat.csv")
options(scipen = 100)
df2 <- melt(df, id.vars="year")
colnames(df2) <- c("year","animal","number")
ggplot(df2, aes(x = year,
y = number,
group = animal,
color = animal)) +
geom_line(size = 2) +
geom_point()+
theme_minimal()+
labs(x="",
y="",
title = "Estimated number of dogs and cats")+
theme(plot.title = element_text(hjust = 0.5))
gganimateを使って、アニメーションを作ります。transition_revealをalong = yearに設定して、yearを動かしていくアニメーションを作ります。
anim <- ggplot(df2,
aes(x = year,
y = number,
group = animal,
color = animal)) +
geom_line(size = 1) +
geom_point()+
labs(x="",
y="",
title = "Estimated number of dogs and cats")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))+
transition_reveal(along = year)
animate(anim, height = 400, width =400,
renderer = gifski_renderer("dog_cat1.gif"))
これでもいいのですが、犬と猫と順番に描写したいと思います。そのためには、ヘルパー列を作成します。ヘルパー列には、1、2、3、、と、描写してほしい順番の数字を入れます。
df3 <- df2 %>%
arrange(animal, year) %>%
mutate(rownumber = row_number())
df3
そして、今度はtransition_revealをalong = rownumber に設定して、rownumberを動かしていくアニメーションを作ります。
anim <- df3 %>%
ggplot(aes(x = year,
y = number,
colour = animal)) +
geom_line(size = 2) +
geom_point(size = 4) +
theme_minimal() +
labs(x="",
y="",
title = "Estimated number of dogs and cats") +
theme(plot.title = element_text(hjust = 0.5)) +
transition_reveal(along = rownumber)
animate(anim, height = 400, width =400,
renderer = gifski_renderer("dog_cat2.gif"))