Plotly ボタンウィジェット#
※記事内に商品プロモーションを含むことがあります。
公開日
Pythonのインタラクティブなグラフを描画できるライブラリPlotlyにて、ボタンウィジェットを追加する方法を解説します。
Plotlyには、高水準のAPIであるPlotly Expressと呼ばれるものもありますが、この記事では細かい調節ができるgraph_objects
を対象としています。
ボタンウィジェットの基礎#
Plotlyのヒートマップ go.Heatmap
に、カラーマップを切り替えるボタンを追加する例を示します。
import plotly.graph_objects as go
z_data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
fig = go.Figure(
data=go.Heatmap(z=z_data, colorscale="Viridis")
)
buttons = [
dict(
args=["colorscale", "Viridis"],
label="Viridis",
method="restyle",
),
dict(
args=["colorscale", "Jet"],
label="Jet",
method="restyle",
),
dict(
args=["colorscale", "Reds"],
label="Reds",
method="restyle",
),
]
fig.update_layout(
updatemenus=[
dict(
type="buttons",
direction="left",
buttons=buttons,
pad={"r": 10, "t": 10},
showactive=True,
x=0.05,
xanchor="left",
y=1.3,
yanchor="top",
),
]
)
fig.show()
上記の例を解説します。
まず、各ボタンを以下のように辞書で定義します。
dict(
args=["colorscale", "Viridis"],
label="Viridis",
method="restyle",
),
各キーの意味は以下の通りです。
args
: ボタンで設定したいパラメータlabel
: ボタンに表示するラベル名method
:"restyle"
(データを変更)、"relayout"
(レイアウトを変更)、"update"
(レイアウトとデータの両方を変更)
次に、fig.update_layout()
メソッドのupdatemenus
引数でボタンを表示します。
fig.update_layout(
updatemenus=[
dict(
type="buttons",
direction="left",
buttons=buttons,
pad={"r": 10, "t": 10},
showactive=True,
x=0.05,
xanchor="left",
y=1.3,
yanchor="top",
),
]
)
各キーの意味は以下の通りです。
type
(str): メニューの種類。"buttons"
,"dropdown"
direction
(str): ボタンを配置する方向。"left"
(横方向)、"top"
(縦方向)buttons
(list): 各ボタンの定義pad
(dict): ボタン周りの空白 (pixel).showactive
(bool):True
の場合、選択したボタンを目立たせるx
(float): x方向の位置(0: 左端。1: 右端)y
(float): y方向の位置(0: 下端。1: 上端)
また、上記以外にupdatemenus
に指定可能なオプションを以下に示します。
active
(int): 初期状態でアクティブにするボタン(0始まりの整数)bgcolor
(str): 非アクティブ状態のボタンの背景色bordercolor
(str): ボタンの枠線の色borderwidth
(int): ボタンの枠線の太さ(デフォルト値:1
)
relayoutによるタイトル表示#
続いて、method="relayout"
としてレイアウトを変更する例を示します。
ボタンによって、図のタイトルの表示・非表示を切り替えます。
fig = go.Figure()
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[1, 3, 2], name="Series A"))
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[3, 2, 1], name="Series B"))
fig.update_layout(title="Figure Title")
buttons = [
dict(
args=["title", "Figure Title"],
label="Show title",
method="relayout",
),
dict(
args=["title", ""],
label="Hide title",
method="relayout",
),
]
fig.update_layout(
updatemenus=[
dict(
type="buttons",
direction="left",
buttons=buttons,
pad={"r": 10, "t": 10},
showactive=True,
x=0.2,
xanchor="left",
y=1.3,
yanchor="top",
),
]
)
fig.show()