okpy

Pythonエンジニア兼テックリーダーが、多くのプロジェクトとチーム運営から得た実践的な知識を共有するブログです。

PythonistaのためのBokehでパワフルなグラフを作ろう

✨ パイソンでインタラクティブなグラフ作成、まだ「静止画」で満足してませんか? Bokehで「動くグラフ」の楽しさを体験しよう!

皆さん、こんにちは!Pythonライフを楽しんでいますか?プログラミングの世界へようこそ!あなたの頼れるPythonista、そして技術ブロガーの[あなたの名前]です!🎉

今日は、皆さんのデータ分析や可視化の世界をさらに楽しく、そしてパワフルにする、とっておきのライブラリ「Bokeh (ボケ)」をご紹介します。📊📈📉

「データ可視化って、matplotlibやseabornで十分じゃないの?」と思ったそこのあなた! Bokehは、ただの「きれいなグラフ」を作るだけではありません。ユーザーが直接触れて、データを探索できる「インタラクティブなグラフ」を、Pythonだけで簡単に作れる魔法のようなライブラリなんです!✨

この記事を読めば、あなたもきっとBokehの魅力にハマるはず!さあ、一緒にインタラクティブな可視化の世界へ飛び込みましょう!🚀

📝 TL;DR (3行要約) * 何これ? Pythonでウェブブラウザ上で動く、美しくてインタラクティブなグラフやダッシュボードを簡単に作れるライブラリだよ! * いつ使うの? データの傾向を詳しく見たい時、ユーザーが自由にデータを操作できるレポートを作りたい時、ウェブアプリでリッチな可視化を提供したい時に大活躍! * 良いところ? Pythonのコードだけで高度なインタラクティブ性が実現できて、JavaScriptの知識がなくてもリッチなウェブ可視化ができるのが最大の魅力!ブラウザで直接動くから共有も簡単!


1. 🤔 Bokeh (ボケ) とは何ですか?

Bokehという名前、ちょっと面白いですよね?日本の「ボケ」という言葉から来ているわけではありません(たぶん!😅)。これは「光学的なぼかし」や「写真の背景をぼかす効果」を意味する写真用語「Bokeh」に由来しています。まるで、データの中から重要な部分を際立たせるようなイメージでしょうか?💡

さて、その役割を一言で言うなら、「PythonWebブラウザ上に直接表示できる、インタラクティブなグラフやダッシュボードを作成するためのライブラリ」です!

もう少し具体的に説明しましょう。皆さんが普段よく使うmatplotlibseabornといったライブラリは、グラフを画像ファイル(PNGやJPGなど)として出力したり、Jupyter Notebook上に静的な画像として表示したりすることが得意ですよね?例えるなら、これらのライブラリは「高品質な絵を描く画家さん」のようなものです。🎨 素晴らしい作品を生み出しますが、一度描かれた絵は動きません。

それに対してBokehは、「ユーザーが自由に触れて楽しめる、動く展示物を作るエンジニアさん」といった感じです!🏗️ 例えば、美術館で絵を見るだけではなく、絵の特定の場所を触ると情報がポップアップしたり、スライダーを動かすと絵の色合いが変わったりするような、そんな体験を提供するイメージです。✨

Bokehのすごいところは、これらすべてをPythonのコードだけで実現できる点です。通常、ウェブ上で動くインタラクティブな要素を作るには、HTMLやCSS、そしてJavaScriptといったウェブ技術の知識が不可欠です。しかし、Bokehを使えば、あなたはPythonのコードを書くだけで、ブラウザ上でズームしたり、パン(移動)したり、特定のデータポイントにマウスを合わせると詳細情報が表示されたりする、まるでウェブアプリケーションのようなグラフを簡単に作れてしまうのです!🤯

この「インタラクティブ性」こそがBokehの最大の魅力であり、データの深い洞察を得るための強力な武器となります。静止画では見逃してしまうようなデータの傾向や異常値を、ユーザー自身の操作によって発見できる可能性が広がるのです。これはまるで、あなたが作ったグラフが、ユーザーと直接コミュニケーションを取っているかのよう!🗣️

2. 🚀 いつ使用しますか? (主要な使用事例)

Bokehがどんなに素晴らしいか分かっていただけたところで、具体的にどんな場面でBokehが本領を発揮するのか、いくつか例を見てみましょう!🧐

例1: 📈 複雑な時系列データの探索

株価の推移、センサーデータ、ウェブサイトのアクセスログなど、時間とともに変化するデータ(時系列データ)は非常に多いですよね。このようなデータは、全体像を見るだけでなく、特定の期間だけを拡大して詳細な動きを確認したいことがよくあります。

  • 通常のグラフでは… 全体を一つのグラフで表示すると細部が見えづらく、特定の期間を見るためにはデータの一部を切り出して新しいグラフを作る、といった手間がかかります。
  • Bokehを使うと… 時系列データ全体を表示しつつ、グラフの下に「レンジツール」と呼ばれる小さなスライダーのようなものが自動的に表示されます。ユーザーはこのスライダーを動かすだけで、グラフの表示範囲を自由に変更し、特定の期間のデータをズームイン・ズームアウトして詳細に確認できます。さらに、マウスオーバーで特定の日時の数値を確認したり、複数の系列を個別に表示/非表示に切り替えたりすることも可能です。これはまるで、データのタイムマシンに乗って、好きな時間軸を自由に移動しているかのようです!🕰️

例2: 🗺️ 地図データと統計情報のインタラクティブな可視化

地域ごとの人口密度、店舗の売上データ、感染症の拡大状況など、地理情報と結びついたデータを可視化したい場面は多々あります。

  • 通常のグラフでは… 地図上に色分けされたデータを示すことはできますが、特定の地域をクリックして詳細情報を表示したり、ズームレベルを変えて隣接地域との比較を行ったりすることは難しいです。
  • Bokehを使うと… 地図上にプロットされた各地域(例:都道府県や市区町村)をクリックすると、その地域の詳しい統計情報がポップアップ表示されるようなインタラクティブな地図を作成できます。ユーザーは興味のある地域を自由に選び、関連データを探索できるため、より深い洞察を得やすくなります。まるで、あなたがデータ探偵になって、気になる場所をピンポイントで調査できるような感覚です!🕵️‍♀️

例3: 🧪 パラメータ変更によるシミュレーション結果の動的な表示

機械学習モデルのハイパーパラメータ調整、物理シミュレーションの条件変更など、複数のパラメータを変化させたときの出力結果を比較検討したいケースはよくあります。

  • 通常のグラフでは… パラメータの組み合わせごとに新しいグラフを作成し直す必要があり、非常に手間がかかります。
  • Bokehを使うと… スライダーやドロップダウンメニューといったウィジェットをグラフと連携させることができます。ユーザーがスライダーを動かすと、リアルタイムでグラフのデータが更新され、パラメータ変更による結果の変化を即座に確認できます。これにより、試行錯誤しながら最適なパラメータを見つけ出す作業が格段に効率的になります。これはまるで、あなたのPCに仮想の実験室ができて、自由に条件を変えて結果を観察できるようなものです!🔬

これらの例からわかるように、Bokehは「見る」だけでなく「触れて探索する」ことを目的とした可視化に非常に強力なツールです。ユーザーがデータと直接対話できる環境を提供することで、より深い理解と発見を促すことができるでしょう。

3. 💻 インストール方法

さあ、Bokehの魅力を知ったところで、実際に使ってみたくなったでしょう?インストールはとっても簡単です!Pythonのパッケージ管理ツールpipを使って、以下のコマンドをターミナル(コマンドプロンプト)で実行するだけです。🚀

pip install bokeh

このコマンドを実行すると、Bokehとその依存関係にあるライブラリが自動的にインストールされます。インターネットに接続された環境であれば、数秒から数十秒で完了するはずです。

インストールが成功したか確認するには、Pythonの対話モード(Pythonシェル)を開いて、Bokehをインポートしてみましょう。

import bokeh
print(bokeh.__version__)

エラーが出ずにバージョン情報が表示されれば、無事にインストール完了です!おめでとうございます!🎉 これであなたもBokehユーザーの仲間入りです!

4. 🛠️ 実際動するサンプルコード

それでは、実際にBokehを使って簡単なグラフを作成してみましょう!今回は、シンプルな散布図を作成し、ズームやパン、ツールチップ(マウスオーバーで詳細表示)といった基本的なインタラクティブ機能がどのように動作するかを体験できるコードを用意しました。

このコードは、コピー&ペーストしてそのまま実行できるように、最小限の機能に絞っています。Jupyter NotebookやGoogle Colabで実行すると、出力セルに直接インタラクティブなグラフが表示されます。Pythonスクリプトとして実行すると、HTMLファイルが生成され、それが自動的にブラウザで開きます。

# -*- coding: utf-8 -*-

from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.transform import factor_cmap
from bokeh.palettes import Category10
import pandas as pd
import numpy as np

# 1. サンプルデータの準備
# ランダムなデータを生成します。今回は3つのカテゴリに分けます。
np.random.seed(42) # 再現性のためにシードを設定
data = {
    'x': np.random.rand(100) * 100,
    'y': np.random.rand(100) * 100,
    'size': np.random.rand(100) * 15 + 5, # バブルのサイズ
    'category': np.random.choice(['A', 'B', 'C'], 100),
    'description': [f'データポイント {i}' for i in range(100)]
}
df = pd.DataFrame(data)

# Bokehで使うためのColumnDataSourceを作成
source = ColumnDataSource(df)

# 2. ツールチップの準備
# マウスオーバー時に表示される情報を定義します。
hover = HoverTool(tooltips=[
    ("X値", "@x{0.00}"), # @xはColumnDataSourceの'x'列を参照
    ("Y値", "@y{0.00}"), # {0.00}は小数点以下2桁表示
    ("カテゴリ", "@category"),
    ("詳細", "@description")
])

# 3. グラフの作成
# figure関数でグラフの枠を作成します。
# toolsに'pan', 'wheel_zoom', 'box_zoom', 'reset', 'save'などのツールを指定できます。
# 今回はhoverツールも追加します。
p = figure(
    title="Bokehで作るインタラクティブな散布図",
    x_axis_label="X軸の値",
    y_axis_label="Y軸の値",
    height=400,
    width=600,
    tools=["pan", "wheel_zoom", "box_zoom", "reset", "save", hover]
)

# 4. 散布図のプロット
# circle関数で散布図を描画します。
# ColumnDataSourceをsourceとして渡すと、'x', 'y'などを列名で指定できます。
# colorにはカテゴリごとに異なる色を割り当てます。
p.circle(
    x='x',
    y='y',
    size='size', # サイズもデータで指定
    source=source,
    legend_field='category', # カテゴリごとに凡例を表示
    color=factor_cmap('category', palette=Category10[3], factors=df['category'].unique()),
    alpha=0.7,
    line_color="black"
)

# 凡例をクリックで表示/非表示を切り替えられるように設定
p.legend.click_policy="hide"

# 5. グラフの表示
# show関数でグラフを表示します。
# Jupyter NotebookやGoogle Colabでは、セルに直接表示されます。
# Pythonスクリプトとして実行した場合は、HTMLファイルが生成されブラウザで開きます。
show(p)

実行結果のイメージ

このコードを実行すると、以下のようなインタラクティブな散布図がウェブブラウザまたはJupyter Notebookの出力として表示されます。

  • ズーム: マウスのホイールを回すか、ツールバーの拡大ツール(虫眼鏡アイコン)を使って、グラフの特定の領域を拡大・縮小できます。
  • パン(移動): ツールバーの移動ツール(手のひらアイコン)を選択し、グラフをドラッグすることで表示領域を移動できます。
  • ツールチップ: データポイントにマウスカーソルを合わせると、X値、Y値、カテゴリ、詳細といった情報がポップアップ表示されます。
  • リセット: ツールバーのリセットアイコンをクリックすると、グラフが初期表示状態に戻ります。
  • 保存: ツールバーの保存アイコンをクリックすると、グラフをPNG画像として保存できます。
  • 凡例の操作: グラフ右側の凡例(Category A, B, C)をクリックすると、対応するカテゴリのデータポイントを表示/非表示に切り替えることができます。

ぜひ、実際にコードを実行して、Bokehのインタラクティブ性を体感してみてください!✨

5. 🔍 コード詳細説明

上記のサンプルコードを、初めての方でも理解できるように一つずつ丁寧に解説していきますね!📝

1. import文で必要なものを読み込む

from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.transform import factor_cmap
from bokeh.palettes import Category10
import pandas as pd
import numpy as np
  • bokeh.plottingからfigureshowをインポートしています。
    • figure: グラフの「キャンバス」や「枠」を作成するための関数です。これがないとグラフは始まりません!
    • show: 作成したグラフを実際に表示するための関数です。
  • bokeh.modelsからColumnDataSourceHoverToolをインポートしています。
    • ColumnDataSource: Bokehでデータを扱うための非常に重要なオブジェクトです。後で詳しく説明しますが、DataFrameのような形式でデータをBokehに渡すための橋渡し役と思ってください。
    • HoverTool: マウスカーソルをデータポイントに重ねたときに、詳細情報を表示する「ツールチップ」機能を実現するためのものです。
  • bokeh.transformからfactor_cmapをインポートしています。
    • factor_cmap: カテゴリデータ(例えば、'A', 'B', 'C'のような文字列)に基づいて自動的に色を割り当てるためのヘルパー関数です。
  • bokeh.palettesからCategory10をインポートしています。
    • Category10: Bokehが提供する色のパレットの一つです。カテゴリごとに異なる色を割り当てる際に便利です。Category10[3]は、10色パレットの中から最初の3色を使うという意味です。
  • pandasnumpyは、データ処理の強力な味方ですね。Pythonでデータサイエンスを行うなら、この2つは必須ライブラリです!

2. サンプルデータの準備

np.random.seed(42) # 再現性のためにシードを設定
data = {
    'x': np.random.rand(100) * 100,
    'y': np.random.rand(100) * 100,
    'size': np.random.rand(100) * 15 + 5, # バブルのサイズ
    'category': np.random.choice(['A', 'B', 'C'], 100),
    'description': [f'データポイント {i}' for i in range(100)]
}
df = pd.DataFrame(data)
  • ここでは、ランダムな数値を使って架空のデータを作成しています。xyは散布図の座標、sizeは各点の大きさ、categoryはデータを3つのグループ(A, B, C)に分けるための情報、descriptionは各データ点の詳細説明です。
  • pd.DataFrame(data)で、この辞書形式のデータをpandasのDataFrameに変換しています。データ分析では、DataFrameの形にしておくと非常に扱いやすいです。
source = ColumnDataSource(df)
  • ここが重要です! ColumnDataSource(df)は、先ほど作成したDataFrame dfを、Bokehが理解できる専用のデータ形式に変換しています。Bokehは、このColumnDataSourceを通じてグラフにデータを供給します。データを更新したい場合も、このsourceオブジェクトを操作することで、グラフが動的に更新される仕組みになっています。

3. ツールチップの準備

hover = HoverTool(tooltips=[
    ("X値", "@x{0.00}"),
    ("Y値", "@y{0.00}"),
    ("カテゴリ", "@category"),
    ("詳細", "@description")
])
  • HoverToolは、グラフ上のデータポイントにマウスを重ねたときに表示される情報(ツールチップ)を定義します。
  • tooltipsには、表示したい情報のリストを渡します。各要素は(表示名, データソースの列名)のタプルです。
  • "@x""@y"のように、@を先頭につけることで、ColumnDataSourceから指定した列のデータを引っ張ってくることができます。
  • "{0.00}"のような書式指定は、数値の表示形式をコントロールします。ここでは小数点以下2桁で表示するという意味です。

4. グラフの作成

p = figure(
    title="Bokehで作るインタラクティブな散布図",
    x_axis_label="X軸の値",
    y_axis_label="Y軸の値",
    height=400,
    width=600,
    tools=["pan", "wheel_zoom", "box_zoom", "reset", "save", hover]
)
  • figure()関数で、グラフの基本的な設定を行います。
    • title: グラフのタイトルです。
    • x_axis_label, y_axis_label: X軸とY軸のラベルです。
    • height, width: グラフの高さと幅をピクセル単位で指定します。
    • tools: ここでグラフにどんなインタラクティブ機能を持たせるかをリストで指定します。
      • "pan": ドラッグでグラフを移動させる機能
      • "wheel_zoom": マウスホイールでズームイン・ズームアウトする機能
      • "box_zoom": 四角い範囲を選択してその部分を拡大する機能
      • "reset": ズームやパンをリセットして初期状態に戻す機能
      • "save": グラフを画像ファイルとして保存する機能
      • hover: 先ほど作成したHoverToolオブジェクトをここに追加することで、ツールチップ機能が有効になります。

5. 散布図のプロット

p.circle(
    x='x',
    y='y',
    size='size',
    source=source,
    legend_field='category',
    color=factor_cmap('category', palette=Category10[3], factors=df['category'].unique()),
    alpha=0.7,
    line_color="black"
)
  • p.circle()は、figureオブジェクトpに対して散布図(円形のマーカー)を描画するメソッドです。
    • x='x', y='y': ColumnDataSource内のどの列をX軸、Y軸の値として使うかを指定します。
    • size='size': ColumnDataSource内の'size'列の値を、各円の大きさとして使います。データによって円の大きさが変わる「バブルチャート」になりますね!
    • source=source: ここで、どのColumnDataSourceを使うかを指定します。先ほど作ったsourceオブジェクトを渡しています。
    • legend_field='category': category列の値('A', 'B', 'C')を使って凡例を自動的に生成します。
    • color=factor_cmap(...): これがカテゴリごとに色を分ける部分です。
      • factor_cmap('category', ...): 'category'列の値に基づいて色をマップ(割り当て)します。
      • palette=Category10[3]: Category10という色のセットから3色を選びます。
      • factors=df['category'].unique(): category列のユニークな値('A', 'B', 'C')を、色を割り当てる際の「ファクター(要素)」として指定します。
    • alpha=0.7: 円の透明度を設定します。0が完全透明、1が完全不透明です。少し透明にすることで、重なり合った部分が見やすくなります。
    • line_color="black": 円の境界線の色を黒に設定します。
p.legend.click_policy="hide"
  • この行は、グラフの凡例(Legend)に関する設定です。click_policy="hide"とすることで、凡例の項目(例:Category A)をクリックすると、そのカテゴリのデータポイントがグラフから一時的に非表示になるように設定しています。もう一度クリックすると再表示されます。これはデータのフィルタリングに使える、非常に便利なインタラクティブ機能です!

6. グラフの表示

show(p)
  • 最後に、show(p)を呼び出すことで、作成したfigureオブジェクトpがウェブブラウザ(またはJupyter Notebookの出力セル)に表示されます。

これで、皆さんの最初のインタラクティブなBokehグラフが完成です!🎉 各コードが何をしているのか、少しは理解が深まったでしょうか?

⚠️ 注意する点または꿀팁 (ちょっとしたヒント)

Bokehは素晴らしいライブラリですが、いくつか知っておくと便利な注意点や「꿀팁 (クルティプ, 韓国語で"ハニーチップ"=とっておきのヒント)」があります!🍯

1. データ量とパフォーマンス 🚀

Bokehはウェブブラウザ上で動作するため、非常に大量のデータポイント(例えば数十万点以上)を一度にプロットしようとすると、ブラウザの動作が重くなったり、表示に時間がかかったりすることがあります。これはBokehだけの問題ではなく、ウェブブラウザでリッチなグラフを表示する際の一般的な課題です。

  • 꿀팁: データが非常に多い場合は、以下の方法を検討してみましょう。
    • データのサンプリング: 全部のデータを表示するのではなく、ランダムに一部のデータを抽出して表示することで、パフォーマンスを向上させます。
    • データの集計: 例えば、時系列データなら、生データをそのままプロットするのではなく、1時間ごとや1日ごとの平均値や合計値に集計してからプロットすることで、データポイント数を減らせます。
    • WebGLの活用: Bokehは、大量のデータ描画を高速化するためにWebGLを利用する機能も持っています。output_backend="webgl"figure関数に渡すことで、GPUを活用した高速描画を試すことができます。(例: p = figure(..., output_backend="webgl")
    • Bokeh Serverの活用: Bokehは、Pythonのバックエンドと連携して、動的にデータを更新したり、ユーザーの操作に応じてサーバー側で複雑な計算を行ってグラフを更新したりする「Bokeh Server」という機能も提供しています。これにより、非常に大規模なデータセットでもスムーズなインタラクティブ性を実現できますが、設定は少し複雑になります。

2. Jupyter Notebookでの表示とHTMLファイル出力の違い 📁

Jupyter NotebookやGoogle ColabでBokehのコードを実行すると、出力セルに直接グラフが表示されるため、とても便利です。しかし、このグラフを他の人に共有したい場合はどうでしょう?

  • Jupyterでの表示: show()関数がJupyter環境を自動で検知し、セル内に結果を表示してくれます。
  • HTMLファイル出力: Jupyter以外のPythonスクリプトとして実行した場合、show()関数はデフォルトで一時的なHTMLファイルを生成し、それをウェブブラウザで開きます。もし、特定のファイル名でHTMLファイルを保存したい場合は、output_file()関数をshow()の前に呼び出します。

    from bokeh.plotting import figure, show, output_file
    
    # ... グラフ作成コード ...
    
    output_file("my_interactive_plot.html", title="私のBokehグラフ") # ファイル名を指定
    show(p)
    

    このようにすると、指定したファイル名(例: my_interactive_plot.html)でHTMLファイルが生成され、そのファイルは誰とでも共有できます。ブラウザでそのHTMLファイルを開けば、インタラクティブなグラフを体験できます!

🔗 一緒にを見ると良いライブラリ

Bokehは単体でも強力ですが、他のライブラリと組み合わせることで、さらにその力を発揮します。ここでは、Bokehと相性の良いライブラリを一つご紹介します。

Pandas (パンダス) 🐼

「あれ?さっきも出てきたぞ?」と思った方、正解です!pandasPythonでデータ分析を行う上で、もはや欠かせない存在ですよね。DataFrameという表形式のデータを扱うのに特化しており、データの読み込み、加工、集計、結合など、あらゆるデータ操作を効率的に行えます。

  • Bokehとの関係: 上のサンプルコードでもお見せしたように、Bokehはpandas.DataFrameColumnDataSourceに変換して扱うのが非常に得意です。つまり、pandasでデータをきれいに整形し、必要な形に加工した後に、そのDataFrameをそのままBokehに渡して美しいグラフを作成する、というワークフローが一般的で、とてもスムーズに行えます。
  • なぜ一緒に?: ほとんどのデータは、そのままの形でグラフにできるわけではありません。欠損値の処理、データのフィルタリング、新しい特徴量の作成、複数のデータセットの結合など、グラフ化する前の「下準備」が不可欠です。pandasは、この下準備の段階で最強のツールです。pandasでデータを完璧に準備し、その結果をBokehで最高の形で表現する。この連携が、あなたのデータ分析の生産性を格段に高めてくれます。

つまり、pandasはあなたのデータの「料理人」🍳、Bokehはその料理を魅力的に「盛り付けるシェフ」👨‍🍳といったところでしょうか!どちらも欠かせない存在なのです!

6. 🎉 마무리

皆さん、今日のBokehの旅、いかがでしたでしょうか?🚀

今日は、Pythonインタラクティブなウェブベースのグラフを簡単に作成できる強力なライブラリ「Bokeh」について学びました。

  • 静的なグラフだけでなく、ズーム、パン、ツールチップなど、ユーザーが触れてデータを探索できるインタラクティブな可視化を実現できること。
  • データの整形に便利なpandasと組み合わせることで、さらに強力なデータ分析ワークフローを構築できること。
  • ColumnDataSourceを通じてデータを渡し、figureと各種グリフ(circle, lineなど)を使ってグラフを描画する基本的な手順。

これらを体験していただけたかと思います。Bokehは、あなたのデータストーリーをより説得力のある、魅力的なものに変える無限の可能性を秘めています。

データ分析の目的は、単に数字を並べることではありません。その数字が持つ意味を理解し、そこから価値ある洞察を引き出し、そしてそれを他者に効果的に伝えることです。Bokehは、この「伝える」という部分において、あなたの強力な味方になってくれるはずです。

💡 あなたへの挑戦! (Challenge for You!)

今日のサンプルコードをベースに、ぜひあなた自身のデータで試してみてください。

  1. データの変更: サンプルコードのデータ生成部分を、あなた自身のExcelファイル(CSVファイル)やWebから取得したデータに置き換えてみましょう。
  2. グラフの種類の変更: p.circle()の代わりに、p.line()(折れ線グラフ)やp.vbar()(棒グラフ)など、他のグリフ関数を試して、違う種類のグラフを描いてみましょう。
  3. 色のカスタマイズ: Category10以外のパレット(例: Viridis, Spectralなど)を試したり、特定の色を自分で指定したりして、グラフの色をあなたの好みに合わせて変えてみましょう。

最初は小さな一歩かもしれませんが、この挑戦があなたのPython可視化スキルを大きく成長させるきっかけになるはずです!もし詰まったら、Bokehの公式ドキュメント(非常に充実しています!)を参考にしたり、ウェブで検索してみたりしてください。きっと新しい発見があるはずです。

さあ、あなたの手で、データが語り始めるインタラクティブなグラフを生み出しましょう!応援しています!🙌

また次の記事でお会いしましょう!Happy Coding!👩‍💻👨‍💻