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に関して勉強していきます。
ではでは今回はこんな感じで。
コメント