【Bokehを学ぶ-第5回】Bokehのグラフでグラフ内のグリッドを調整、ツールバーの有効化

Python

皆さん、こんにちは!

この記事はPythonのデータ可視化ライブラリである「Bokehを学ぶシリーズ」の第5回目。

公式ドキュメントのFirst Stepを更に詳しく解説するようなイメージで進めていきます。

朱莉
Bokehを使って、データ分析の結果を多くの人に共有しましょう!!

この記事では、第5回目ということで、公式ドキュメントのFirst Stepの1つ「Customizing your plot」の後半を解説していきます。

シリーズの別記事を以下にまとめておきます!

【Bokehを学ぶ-第1回】Bokehでインタラクティブな可視化を行おう! 折れ線グラフの描画

【Bokehを学ぶ-第2回】Bokehで複数種類のグラフを描画しよう

【Bokehを学ぶ-第3回】Bokehのグラフの細かい部分を整える 凡例、テキスト、注釈

【Bokehを学ぶ-第4回】Bokehのグラフでツールバーを設定する!テーマを変更、軸の調整

グリッドのカスタマイズ

グリッド線を定義

グリッドの外観を変更する場合、x_grid()やy_grid()に対して様々な設定が可能となります。

以下の例では、xgrid.grid_line_colorを”Red”とすることで、X軸側(つまり縦に書かれている線)を赤色に変更することができます。

ygrid.grid_line_dashでは、破線の間隔を定義することが可能です。

from bokeh.plotting import figure, show

# サンプルデータを作成
# x,yをそれぞれリスト形式
x = [1, 2, 3, 4, 5]
y = [4, 5, 5, 7, 2]

# プロットを作成
p = figure(
    title="Customized grid lines example",
    sizing_mode="stretch_width",
    max_width=500,
    height=250,
)

# 折れ線グラフを作成
p.line(x, y, line_color="green", line_width=2)

# xgrid線を赤色に変更する
p.xgrid.grid_line_color = "red"

# ygrid線を変更する
p.ygrid.grid_line_alpha = 0.8 # 透明度
p.ygrid.grid_line_dash = [6, 4] # 線の間隔を決める

# 結果を描画する
show(p)

バンドと境界線

次はバンドと境界線を定義します。

バンドの背景色は「band_fill_color」で定義します。

from bokeh.plotting import figure, show

# サンプルデータを作成
# x,yをそれぞれリスト形式
x = [1, 2, 3, 4, 5]
y = [4, 5, 5, 7, 2]

# プロットを作成
p = figure(
    title="Bands and bonds example",
    sizing_mode="stretch_width",
    max_width=500,
    height=250,
)

# 折れ線グラフを作成
p.line(x, y, line_color="green", line_width=2)

# ygridにバンドを作成
p.ygrid.band_fill_color = "olive" #バンドの色を定義
p.ygrid.band_fill_alpha = 0.1 # バンドの透明度を定義

# バンドの間隔を定義
p.xgrid.bounds = (2, 4)

# 結果を描画する
show(p)

グラフ背景の塗りつぶし

先ほどの「band_fill_color」では、グラフ内部の背景の一部を変更しましたが、そちらはあくまでもグラフの視認性をあげるためのものです。

以下で紹介する塗りつぶしの方法はどちらかと言うとデザイン的な側面が強いと思います。

設定できる色の種類は、CSSカラー(”firebrick”など)、#で始まる16進数値、RGBカラー(255,255,255)、RGBAカラー(255,255,255,0.5)が可能です。

from bokeh.plotting import figure, show

# サンプルデータを作成
# x,yをそれぞれリスト形式
x = [1, 2, 3, 4, 5]
y = [4, 5, 5, 7, 2]

# プロットを作成
p = figure(
    title="Background colors example",
    sizing_mode="stretch_width",
    max_width=500,
    height=250,
)

# 折れ線グラフを定義する
p.line(x, y, line_color="green", line_width=2)

# グラフの色を定義
p.background_fill_color = (204, 255, 255) # 背景色を変更
p.border_fill_color = (102, 204, 255) # 縁の背景色を変更
p.outline_line_color = (0, 0, 255) # 縁線の色を変更

# 結果を描画する
show(p)

ツールバーのカスタマイズ

次はツールバーのカスタマイズです。

ツールバーは、以下にあるようなグラフを拡大縮小したり、画像の保存などのBokehグラフを操作するためのメニューです。

デフォルトだと、以下の7つです。

ツールバーの場所も変更可能です。

「toolbar_location」を設定することで場所が変更可能です。(belowだとグラフの下側)

p = figure(title="Toolbar positioning example", toolbar_location="below")

ツールバーを自動的に非表時にする(マウスホバーで表示される)

toolbar.autohide = True

にすることで、ツールバーを非表示にすることが可能です。

とはいえ、多くの人はBokehグラフを扱うのが初めてになると思われるので、隠す必要はあまりなさそうです。

from bokeh.plotting import figure, show

# サンプルデータを作成
# x,yをそれぞれリスト形式
x = [1, 2, 3, 4, 5]
y = [4, 5, 5, 7, 2]

# プロットを作成
p = figure(
    title="Toolbar autohide example",
    sizing_mode="stretch_width",
    max_width=500,
    height=250,
)

# ツールバーを隠すをTrue
p.toolbar.autohide = True

# 折れ線グラフを描画する
p.line(x, y)

# 結果を描画する
show(p)

ツールバーの有効化と無効化

ツールバーを完全にナシにするには、

toolbar_location = Noneにする必要があります。

こちらを定義することで、Matplotlibなどと同じように静的なグラフとなります。

以下の例では、前半で、ズームとリセットを許可し、あとから移動ツールを許可しています。

from bokeh.models import BoxZoomTool, PanTool, ResetTool
from bokeh.plotting import figure, show

# サンプルデータを作成
# x,yをそれぞれリスト形式
x = [1, 2, 3, 4, 5]
y = [4, 5, 5, 7, 2]

# プロットを作成
p = figure(
    title="Modifying tools example",
    tools=[BoxZoomTool(), ResetTool()], # ツールのうち、ズームとリセットのみ許可
    sizing_mode="stretch_width", # 
    max_width=500,
    height=250,
)

# ツールバーを追加する
# 横変化の移動のみを許可
p.add_tools(PanTool(dimensions="width")) # ツールバーを後から追加。

# バブルチャートを描画する
p.circle(x, y, size=10)

# 結果を描画する
show(p)

ホバーツールの追加

こちらの機能では、データポイント上にマウスを置いた際に、データがポップアップで表示される機能です。

Bokehグラフを採用する大きな理由になると思います。

Hover Toolを用いますが、当然表示用のデータセットをこちらで用意してやる必要がるので、ひと手間掛かります。

有効化の手順は以下の通りです。

  1. Hover Toolクラスをbokeh.models.toolsをインポートする
  2. figure()関数を呼び出す際に、tools内にhovertool()をlist形式で記述(ほぼおまじない)
  3. figure()関数を呼び出す際に、表示したい文字列をtooltips引数を与える

表示したい文字列は「@x」のような形で記述することで、figure()関数で利用されるデータと連動させることが出来ます。(例えば、以下のコードのxのデータが”test”という名前で定義した場合、「@test」と書く)

ホバーツールの文字色や背景色も他のグラフ要素と同じように適用できます。(詳細は公式ドキュメントを参照)

ホバーツールは一部のグラフタイプが非対応となっています。
・annulus・patch・text
・oval・step・image_url
・ray・bezier
・arc・quadratic
from bokeh.models import HoverTool
from bokeh.plotting import figure, show

# サンプルデータを作成
# x,yをそれぞれリスト形式
x = [1, 2, 3, 4, 5]
y = [4, 5, 5, 7, 2]

p = figure(
    y_range=(0, 10),
    toolbar_location=None,
    tools=[HoverTool()], # ホバーを有効にする
    tooltips="Data point @x has the value @y", # 表示したい文字列を記述
    sizing_mode="stretch_width",
    max_width=500,
    height=250,
)

# バブルチャートと折れ線グラフを描画する
p.circle(x, y, size=10)
p.line(x, y, line_width=2)

# 結果を描画する
show(p)

まとめ

「Bokehを学ぶシリーズ」第5回はいかがでしたでしょうか。

Bokehの中でもかなり特徴的なホバー要素について扱いました。

経った数行でイイ感じのグラフを書くことが出来るBokehをマスターできれば、簡単に社内共有用のデータダッシュボードを作成することができそうです。

朱莉
このシリーズを通じて、データ可視化をより効率的に行えるようになれば嬉しいです!