Matplotlibを使って「ぬるぬる動く棒グラフ」を作ってみた

bar_chart_race-03 データサイエンティスト

最近、Youtubeをみていると下で見るような「 ぬるぬる動く棒グラフ 」を見かけるようになりました。

自分でも、この「 ぬるぬる動く棒グラフ 」を作りたくて調べてみました。

これらのグラフは、常に上位数個の情報のみを表示させて時系列的に順番が入れ替えるように動的に表示させます。情報量を抑えつつも、経時変化も追えるし思わず見入ってしまうグラフです。

 

「 ぬるぬる動く棒グラフ 」の正体は?

さて、この「ぬるぬる動く棒グラフ」ですが、ネットで調べてみると「Bar Chart Race」と呼ばれており、PythonのMatplotlibを用いて作成が可能です。

matplotlibについては、公式ページとこのまとめページを参考に作成しました。

以下にコードと説明を示していきます。

「ぬるぬる動くグラフ」のコード

matplotlib, pandasのインポート、データの読み込み

描画、データ処理に必要なmatplotlib, pandasをインポートします。
matplotlibの結果をインラインでjupyter notebook上に表示させるために’%matplotlib inline’を追加しております。

今回用いるデータは’city populations dataset‘でGithub上で公開されているデータをpandasで読み込みます。
このdatasetの中の’name’, ‘group’, ‘year’, ‘value’の4つのcolumnを取り出します。

 

name group year value
0 Agra India 1575 200.0
1 Agra India 1576 212.0
2 Agra India 1577 224.0

 

Datasetの準備

pandasの機能を使って指定した年(例では2020年)のうち’value’の大きい「Top10について表示します。

name group year value
6047 Tokyo Asia 2020 38323.0
1326 Delhi India 2020 29348.0
5549 Shanghai Asia 2020 27137.0
691 Beijing Asia 2020 24201.0
3750 Mumbai India 2020 22838.0
5447 Sao Paulo Latin America 2020 22119.0
3576 Mexico City Latin America 2020 21868.0
1338 Dhaka Asia 2020 20989.0
1197 Cairo Middle East 2020 20568.0
4681 Osaka Asia 2020 20523.0

 

基本の棒グラフ

棒グラフと軸の作成を行う。棒グラフの作成には、’ax.barh(x, y)’を使用します。

bar_chart_race-01

この設定では最も’Value’の高いものが一番下に表示されてしまいます。

 

棒グラフの色設定, ラベル設定

次に、棒グラフに色をつけて表示させ、かつラベルとして’Value’と’Group’を各棒グラフに表示させます。
これにはmatplotlibの[ colors ]と[ group_lk ]を用います。

[ group_lk ]は’name’と’group’をまとめて表示します。

bar_chart_race-02

表の書式を整える

続いては、’ draw_barchart ‘を用いて、以下の表の書式を整えます。

  • Text: Update font sizes, color, orientation (フォントサイズ、色、向きの調整)
  • Axis: Move X-axis to top, add color & subtitle (x軸を上に移動し、subtitleを追加)
  • Grid: Add lines behind bars (棒グラフの背景にグリッド線を追加)
  • Format: comma separated values and axes tickers (‘Value’と’x軸’の数字の表示をコンマで示す Ex. 10000 → 10,000)
  • Add title, credits, gutter space (タイトル・クレジット・スペースの追加)
  • Remove: box frame, y-axis labels (枠線、y軸のラベルの除去)

bar_chart_race-03

棒グラフを動かす

棒グラフを動かすには、FuncAnimation を使用します。

FuncAnimationは、Canvasへの描画を繰り返し行うことでアニメーション再生を行います。

今回の例の場合は、繰り返し操作は’draw_barchart’です。
そして、’frames’という引数も使用します。これは、どのパラメータで’draw_barchart’を実行するかを指定することができます。
今回の例では、’year’を指定して範囲を1999 から 2020までとしました。

最後に

今回は「ぬるぬる動く棒グラフ」である「Bar chart race」をPythonのmatplotlibを用いて描いてみました。

このグラフは、常に上位数個の情報のみを表示させて時系列的に順番が入れ替えるように動的に表示させるため情報量を抑えつつも、経時変化を追えるインタラクティブなグラフです。

今回は、ベーシックな棒グラフの情報のみでしたが、次は別のグラフ情報で経時的なグラフを作成したり、最終的には複数のグラフ要素を取り込みたいなと考えています。

コメント

タイトルとURLをコピーしました