今回は、Python Plotlyでスライダーを利用したインタラクティブなグラフを作成したいと思います。
Dashの場合のスライダーの使い方はこちらの記事で紹介しています。
ダッシュボードの場合の方がスライダーを使うことが多いと思いますが、分析中に比較のためにスライダーを使いたくなる場合があります。
Dashの場合では、コールバックを使えば簡単にできますが、Plotlyだと少し違いますので細かく解説したいと思います。
公式HPの解説はこちらです。
基本的な使い方
ここでは以下のような月ごとのリターンのデータ(df_meanというDataFrame)を使いたいと思います。
ベースとなるグラフの作成
まずは表示したいデータを作成すべて作成します。
ここでは1月から12月までの各月のグラフを作成します。
fig = go.Figure() for month in range(1, 13): fig.add_trace(go.Bar(x=df_mean.columns, y=df_mean.loc[month], width=0.3, marker_color='royalblue', visible=False, texttemplate='%{y:0.2%}', textposition='outside')) fig.data[0].visible = True
1月から12月までの棒グラフを作成し、一旦すべてvisible=Falseとして表示させないようにし、最後に1つ目のデータ(1月)のみを表示させています。
もちろん、月によって色を変える、一番リターンが大きい企業の棒だけ色を強調するなども可能です。
次に必ずしも必要ではありませんが、レイアウトを整えるために次のようなレイアウトを設定します。
fig.update_layout(plot_bgcolor='white', title=dict(text='1月', font_color='grey'), xaxis=dict(showline=True, linewidth=1, linecolor='lightgrey'), yaxis=dict(showline=True, linewidth=1, linecolor='lightgrey', zeroline=True, zerolinecolor='lightgrey', zerolinewidth=1, tickformat='.2%')) fig.show()
レイアウト設定についてはこちらをご参照ください。
この時点では以下のようなグラフが作成されます。
1月だけが表示されていますね。
スライダーの各ステップを作成
では、ここからスライダーを追加していきます。
スライダーを作成するために、スライダーの1月から12月までの各ステップを定義していきます。
steps = [] for i in range(len(fig.data)): step = dict( method="update", args=[{"visible": [False] * len(fig.data)}, {"title": f'<b>{i+1}月のリターン'}], label=f'{i+1}月' ) step["args"][0]["visible"][i] = True steps.append(step)
stepに辞書形式で設定しています。
まず、4行目の"method"というプロパティに"update"を設定することによって、データやレイアウトを変えることができます。
他にも以下のようなmethodが選択できますが、この場合updateで問題ありません。
- restyle ... データを変更する
- relayout ... レイアウトを変更する
- animate ... アニメーションを開始する
アニメーションについては別の機会に紹介したいと思います。
そして、argsに変更するプロパティを設定します。
ここでは、5行目で"visible"をいったんすべてFalseにし、そのあとの10行目で対象となる月の分だけTrueにしています。
6行目でグラフの左上に表示したい"title"をXX月となるように設定しています。
"label"プロパティにはスライダー上の表示を設定します。
デフォルトではstep-1、step-2、…といった表示になるので、ここでは1月、2月、…というような表示にしています。
最後にstepsというリストに追加しています。
ステップの定義からスライダーを設定する
これで各ステップのレイアウトを定義できたので、あとはslidersというリストに定義したstepsを設定します。
sliders = [dict( active=0, currentvalue={"prefix": "対象月: "}, steps=steps )]
"active"は0とすることによって、初期表示に1番初めのstepである1月が表示されます。
active=11と設定すれば12月が初期表示になります。
"currentvalue"では、選択されているスライダーの値の表示方法を設定でき、ここでは"prefix"を"対象月:XX月"となるようにしています。
最後に、その前に設定したstepsというリストをstepsプロパティに設定します。
スライダーを表示
これでslidersの設定が完了しました。
では、このスライダーの設定をグラフに表示するために、fig.update_layout()のslidersプロパティにslidersを設定し表示します。
fig.update_layout( sliders=sliders ) fig.show()
すると以下のようなグラフが出来上がります。
スライダーで選択した月の情報に従って、表示が変わっていますね。
裏では、選択された月を表示し、それ以外の月が非表示にする、タイトルを設定し直すといった処理が動いています。
まとめ
簡単ですが、今回はPlotlyでのスライダーの使い方をご紹介しました。
Dashよりも少しややこしいですが、Jupyter Notebook上で分析する際には使えると便利なことがしばしばあります。
次回はこれも使ってアニメーションの設定方法を紹介したいと思います!
では!