ただの折れ線グラフをみても、「はあ」となるだけですが、アニメ―ションを付けるとストーリーを付けやすいと思います。

Data visualization

Rで作ります。gganimateとtidyverseを使用します。

使用するデータ

日本にいると推定される猫と犬の数を使います。一般財団法人のペットフード協会さんが推測データを公表しています。

https://petfood.or.jp/data/

データは以下のような形です。

コード

まずは、普通に折れ線グラフを作成します。上記のそのままの形だと折れ線グラフを書けないので、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"))

Categories:

category