Plotly スライダーウィジェット#
※記事内に商品プロモーションを含むことがあります。
公開日
Pythonのインタラクティブなグラフを描画できるライブラリPlotlyにて、スライダーウィジェットを追加する方法を解説します。
Plotlyには、高水準のAPIであるPlotly Expressと呼ばれるものもありますが、この記事では細かい調節ができるgraph_objects
を対象としています。
スライダーの基礎#
Plotlyの棒グラフ go.Bar
を3つ用意し、スライダーで切り替える例を示します。
スライダーを右に動かすと、棒グラフの数値が増えます。
import plotly.graph_objects as go
fig = go.Figure(
data=[
go.Bar(x=["Alice", "Bob"], y=[1, 2], visible=True),
go.Bar(x=["Alice", "Bob"], y=[2, 4], visible=False),
go.Bar(x=["Alice", "Bob"], y=[3, 6], visible=False),
],
)
steps = []
for i in range(len(fig.data)):
step = dict(
method="update",
args=[{"visible": [False] * len(fig.data)}],
label=f"{i}"
)
step["args"][0]["visible"][i] = True # Toggle i'th trace to "visible"
steps.append(step)
sliders = [dict(
active=0,
currentvalue={"prefix": "Year: "},
pad={"t": 30},
steps=steps
)]
fig.update_layout(sliders=sliders)
fig.update_yaxes(range=(0, 8))
fig.show()
上記の例を解説します。
まず、スライダーで表示したいグラフ(ここではgo.Bar
)をリストでgo.Figure
のdata
属性に定義します。
なお、初期状態で表示したいグラフのみvisible=True
として、それ以外のグラフはvisible=False
としておきます。
fig = go.Figure(
data=[
go.Bar(x=["Alice", "Bob"], y=[1, 2], visible=True),
go.Bar(x=["Alice", "Bob"], y=[2, 4], visible=False),
go.Bar(x=["Alice", "Bob"], y=[3, 6], visible=False),
],
)
次に、スライダーを動かしたときの挙動を以下のように変数steps
に定義します。
上記の例では、len(fig.data)
は3
となります。
いったん全グラフのvisible
属性をFalse
にした後、i
番目のグラフ(スライダーで指定するグラフ)のみvisible
属性をTrue
とします。
また、label
属性には、スライダーの下部に表示するラベルを指定します(この例では0
, 1
, 2
となる)。
steps = []
for i in range(len(fig.data)):
step = dict(
method="update",
args=[{"visible": [False] * len(fig.data)}],
label=f"{i}"
)
step["args"][0]["visible"][i] = True # Toggle i'th trace to "visible"
steps.append(step)
さらに、以下のようにグラフにスライダーを追加します。
sliders = [dict(
active=0,
currentvalue={"prefix": "Year: "},
pad={"t": 30},
steps=steps
)]
fig.update_layout(sliders=sliders)
sliders
変数の辞書の意味は以下の通りです。
active
: スライダーの初期位置を0始まりの整数で定義currentvalue
: スライダーで選択中の値に関する設定を定義prefix
: 選択中の値の先頭に付ける文字列を定義
pad
: スライダーの余白を定義step
: スライダーを動かしたときの挙動
スライダーの挙動#
スライダーを動かしたときの挙動に関する設定方法について、もう少し詳しく解説します。
steps = []
for i in range(len(fig.data)):
step = dict(
method="update",
args=[{"visible": [False] * len(fig.data)}],
label=f"{i}"
)
step["args"][0]["visible"][i] = True # Toggle i'th trace to "visible"
steps.append(step)
上記のコードのargs
には、表示するグラフ以外についても設定できます。
例えば、スライダーの位置に合わせてグラフのタイトルを変更する場合、以下のように書けます。
args=[
{"visible": [False] * len(fig.data)},
{"title": f"Alice & Bob's value at Year {i}"},
],
スライダーの表示#
スライダーの表示に関する設定を詳しく解説します。
sliders = [dict(
active=0,
currentvalue={"prefix": "Year: "},
pad={"t": 30},
steps=steps
)]
このdict
には以下の値を設定できます。
activebgcolor
: スライダーがアクティブな場合の色bgcolor
: スライダーの色bordercolor
: スライダーの枠線の色borderwidth
: スライダーの枠線の太さcurrentvalue
: 選択中の値に関する設定font
: フォントの設定color
: 文字色
prefix
: 選択中の値の先頭に付ける文字列suffix
: 選択中の値の後に付ける文字列
font
: スライダー目盛りのフォント設定color
: 文字色
len
: スライダーの長さ(デフォルト値:1
)lenmode
: スライダーの長さlen
を指定するモード。fraction
(デフォルト)、pixels
から選択
以下に例を示します。
sliders = [dict(
active=0,
bgcolor="red",
bordercolor="black",
currentvalue={
"font": {"color": "green"},
"prefix": "Year: ",
"suffix": " (Start: 2025)",
},
font={"color": "blue"},
pad={"t": 30},
len=0.6,
steps=steps,
)]
fig.update_layout(sliders=sliders)
fig.show()