R を使用してアニメーション ヒストグラムを作成する

R を使用してアニメーション ヒストグラムを作成する

Web サイトの投稿に直接埋め込むことができるアニメーション棒グラフの人気が高まっています。 これらは、一定期間にわたる特性の変化のダイナミクスを明確に表示します。 R と汎用パッケージを使用してそれらを作成する方法を見てみましょう。

スキルボックスは次のことを推奨します。 実践コース 「ゼロからのPython開発者」.

リマインダー: 「Habr」のすべての読者が対象 - 「Habr」プロモーション コードを使用してスキルボックス コースに登録すると 10 ルーブルの割引。

パッケージ

R のパッケージが必要です。

このXNUMXつは非常に必要です。 さらに、データを管理し、配列をクリーンアップし、それに応じてフォーマットするには、tidyverse、janitor、およびscaleが必要になります。

データ

このプロジェクトで使用する元のデータセットは、世界銀行の Web サイトからダウンロードされます。 どうぞ - 世界銀行データ。 既製のデータが必要な場合は、同じデータを次からダウンロードできます。 プロジェクトフォルダー.

これはどのような情報ですか? このサンプルには、数年間 (2000 年から 2017 年まで) のほとんどの国の GDP 値が含まれています。

データ処理

以下に掲載されているコードを使用して、必要なデータ形式を準備します。 列名をクリアし、数値を数値形式に変換し、gather() 関数を使用してデータを変換します。 受信したすべての内容は、後で使用できるように gdp_tidy.csv に保存します。

library(tidyverse)
library(janitor)

gdp <- read_csv("./data/GDP_Data.csv")

#select required columns

gdp <- gdp %>% select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

gdp_tidy <- gdp %>%
mutate_at(vars(contains("YR")),as.numeric) %>%
gather(year,value,3:13) %>%
janitor::clean_names() %>%
mutate(year = as.numeric(stringr::str_sub(year,1,4)))

write_csv(gdp_tidy,"./data/gdp_tidy.csv")

アニメーション化されたヒストグラム

作成には XNUMX つの段階が必要です。

  • ggplot2 を使用して、実際のヒストグラムの完全なセットをプロットします。
  • gganimate を使用して、目的のパラメーターを使用して静的ヒストグラムをアニメーション化します。

最後のステップでは、アニメーションを GIF や MP4 などの希望の形式でレンダリングします。

ライブラリのロード

  • ライブラリ(整頓)
  • ライブラリ(ganimate)

データ管理

このステップでは、データをフィルターして各年の上位 10 か国を取得する必要があります。 ヒストグラムの凡例を表示できるようにするいくつかの列を追加しましょう。

gdp_tidy <- read_csv("./data/gdp_tidy.csv")

gdp_formatted <- gdp_tidy %>%
group_by(year) %>%
# The * 1 makes it possible to have non-integer ranks while sliding
mutate(rank = rank(-value),
Value_rel = value/value[rank==1],
Value_lbl = paste0(" ",round(value/1e9))) %>%
group_by(country_name) %>%
filter(rank <=10) %>%
ungroup()

静的ヒストグラムの構築

必要な形式のデータ パッケージが完成したので、静的ヒストグラムの描画を開始します。 基本情報 - 選択した期間における最大 GDP の上位 10 か国。 年度ごとにグラフを作成していきます。

staticplot = ggplot(gdp_formatted, aes(rank, group = country_name,
fill = as.factor(country_name), color = as.factor(country_name))) +
geom_tile(aes(y = value/2,
height = value,
width = 0.9), alpha = 0.8, color = NA) +
geom_text(aes(y = 0, label = paste(country_name, " ")), vjust = 0.2, hjust = 1) +
geom_text(aes(y=value,label = Value_lbl, hjust=0)) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
theme(axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
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=25, hjust=0.5, face="bold", colour="grey", vjust=-1),
plot.subtitle=element_text(size=18, hjust=0.5, face="italic", color="grey"),
plot.caption =element_text(size=8, hjust=0.5, face="italic", color="grey"),
plot.background=element_blank(),
plot.margin = margin(2,2, 2, 4, "cm"))

ggplot2 を使用したプロットの作成は非常に簡単です。 上記のコード セクションでわかるように、theme() 関数にはいくつかの重要なポイントがあります。 これらは、すべての要素が問題なくアニメーションするために必要です。 必要に応じて一部表示されない場合があります。 例: 垂直グリッド線と凡例のみが描画されますが、軸のタイトルとその他のいくつかのコンポーネントは領域から削除されます。

アニメーション

ここでの重要な関数はtransition_states()で、別々の静的グラフをつなぎ合わせます。 view_follow() はグリッド線を描画するために使用されます。

anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'GDP per Year : {closest_state}',
subtitle = "Top 10 Countries",
caption = "GDP in Billions USD | Data Source: World Bank Data")

レンダリング

アニメーションが作成され、anim オブジェクトに保存されたら、animate() 関数を使用してアニメーションをレンダリングします。 animate() で使用されるレンダラーは、必要な出力ファイルのタイプに応じて異なる場合があります。

GIF

# For GIF

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = gifski_renderer("gganim.gif"))

MP4

# For MP4

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = ffmpeg_renderer()) -> for_mp4

anim_save("animation.mp4", animation = for_mp4 )

結果

R を使用してアニメーション ヒストグラムを作成する

ご覧のとおり、複雑なことは何もありません。 プロジェクト全体は次の場所で入手できます。 私のGitHub、お好みに合わせてご利用いただけます。

スキルボックスは次のことを推奨します。

出所: habr.com

コメントを追加します