【matplotlib】bar_chart_raceのオプションを色々いじってみる[Python]

  • URLをコピーしました!
目次

bar chart race

前回、bar_chart_raceライブラリで順位が入れ替わる棒グラフアニメーションを作成する方法を紹介しました。

今回はbar chart raceのオプションを色々といじってみて、どう変わるのかを見ていきましょう。

前回作成したプログラムを基本形とします。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-1.mp4')

実行結果

それでは始めていきましょう。

動画の向き:orientation

動画の向きを横向きから縦向きに変えるには「orientation=”v”」のオプションを追加します。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-2.mp4', orientation="v")

実行結果

ソートの順番:sort

データの順番を降順(大きい方から小さい方)から昇順に変えるには「sort=”asc”」を追加します。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-3.mp4', sort="asc")

実行結果

表示するデータ数:n_bars

表示するデータ数を設定するには「n_bars=データ数」を追加します。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-4.mp4', n_bars=3)

実行結果

並び順を固定:fixed_order

データの並び順を固定するには「fixed_order=True」を追加します。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-5.mp4', fixed_order=True)
実行結果

最大値の固定:fixed_max

最大値を固定するには「fixed_max」を追加します。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-6.mp4', fixed_max=True)

実行結果

ステップの刻み数:steps_per_period

bar chart raceでは二つのデータ間の値を補完してなめらかなデータを作り、動画化します。

その際の二つのデータ間で補完するステップ数を変えるには「steps_per_period=ステップ数」とします。

デフォルトは「10」です。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-7.mp4', steps_per_period=2)

実行結果

データ間の表示時間:period_length

データ間の表示時間を変更するには「period_length=ミリ秒」とします。

この際、指定する秒は「ミリ秒」ですので、ご注意ください。

デフォルトは「500」です。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-8.mp4', period_length=100)

バーの太さ:bar_size

バーの太さを変えるには「bar_size=太さ」を追加します。

デフォルトは「0.95」です。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-9.mp4', bar_size=0.5)

実行結果

動画サイズ:figsize

動画サイズを変えるには「figsize=(縦, 横)」を追加します。

デフォルトは「(6, 3.5)」です。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-10.mp4', figsize=(5,5))

実行結果

バーの色:cmap

バーの色を変えるには「cmap=”カラーマップ”」を追加します。

カラーマップで使えるものはmatplotlibのカラーマップとplotlyのカラーマップが使えるようです。

ただ私の環境ではmatplotlibのカラーマップは認識してくれずplotlyのカラーマップしか使えませんでした。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-11.mp4', cmap="Alphabet")

実行結果

タイトルの追加:title

タイトルを追加するには「title=”タイトル”」を追加します。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-12.mp4', title="Bar Chart Race")

実行結果

スケールの変更:scale

スケールをリニアからlogに変更するには「scale=”log”」を追加します。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 1000)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-13.mp4', scale="log")

実行結果

gifで保存:writer

書き出し方法を変更するには「writer=”書き出し方法”」を追加します。

特にffmpegを入れていない(入れられない or 入れたくない)場合には「Pillow」を使って、「gif形式」で出力するのがお手頃でおすすめです。

import bar_chart_race as bcr
import pandas as pd
import random

countries = ["Japan", "US", "France", "Germany", "UK", "China", "Australia"]
startvalues = [120, 250, 50, 20, 60, 300, 150]

cycle = 100

df = pd.DataFrame()

for country, startval in zip(countries, startvalues):
    val_list = [startval]
    times = random.randint(1, 5)
    for _ in range(cycle):
        val_list.append(times*random.randint(0, 10)+val_list[-1])
    df[country] = val_list
    
bcr.bar_chart_race(df=df, filename='python-matplotlib56-14.gif', writer="pillow")

いくつか使わなさそうなオプションは飛ばしましたが、大体紹介できたと思います。

次回はXMLに関して勉強していきます。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次