Plotly 3次元の散布図

Plotly 3次元の散布図#

※記事内に商品プロモーションを含むことがあります。

公開日

Pythonのインタラクティブなグラフを描画できるライブラリPlotlyにて、Scatter3dを使った3次元散布図を描画する方法を解説します。

Plotlyには、高水準のAPIであるPlotly Expressと呼ばれるものもありますが、 この記事では細かい調節ができるgraph_objectsを対象としています。

Scatter3dの基礎#

Scatter3dを使った3次元散布図の簡単な例を示します。

import plotly.graph_objects as go

x = [1, 2, 3, 4, 5]
y = [1, 3, 2, 2, 1]
z = [2, 3, 4, 3, 2]

fig = go.Figure(
    data=go.Scatter3d(x=x, y=y, z=z, mode="markers"),
)

fig.show()

go.Scatter3d()x, y, z引数にそれぞれx, y, z座標の配列を与えます。 また、mode="markers"とすることにより、点間の線を非表示にします。

markerオプション#

カラーバーなどを表示するには、go.Scatter3d()markerオプションを利用します。 markerオプションには辞書形式で与えます。

  • color (list): マーカーの色

  • colorscale (str): カラーマップ

  • showscale (bool): Trueのときカラーバーを表示

  • colorbar (dict): カラーバーの設定

    • title (dict): カラーバーのタイトルの設定

      • text (str): カラーバーのタイトルの文字

      • side (str): "top"(デフォルト), "right", "bottom"から指定

カラーバーなどを表示する例を以下に示します。

fig = go.Figure(
    data=go.Scatter3d(
        x=x, y=y, z=z, mode="markers", 
        marker={
            "color": [0, 1, 2, 3, 4],
            "colorscale": "jet",
            "showscale": True,
            "colorbar": {
                "title": {
                    "text": "COLOR BAR",
                    "side": "right"
                },
            },
        },
    ),
)

fig.show()

colorscaleに指定可能なカラーマップは以下の通りです。

from pprint import pprint
import plotly.express as px

pprint(sorted(px.colors.named_colorscales()), compact=True)
['aggrnyl', 'agsunset', 'algae', 'amp', 'armyrose', 'balance', 'blackbody',
 'bluered', 'blues', 'blugrn', 'bluyl', 'brbg', 'brwnyl', 'bugn', 'bupu',
 'burg', 'burgyl', 'cividis', 'curl', 'darkmint', 'deep', 'delta', 'dense',
 'earth', 'edge', 'electric', 'emrld', 'fall', 'geyser', 'gnbu', 'gray',
 'greens', 'greys', 'haline', 'hot', 'hsv', 'ice', 'icefire', 'inferno', 'jet',
 'magenta', 'magma', 'matter', 'mint', 'mrybm', 'mygbm', 'oranges', 'orrd',
 'oryel', 'oxy', 'peach', 'phase', 'picnic', 'pinkyl', 'piyg', 'plasma',
 'plotly3', 'portland', 'prgn', 'pubu', 'pubugn', 'puor', 'purd', 'purp',
 'purples', 'purpor', 'rainbow', 'rdbu', 'rdgy', 'rdpu', 'rdylbu', 'rdylgn',
 'redor', 'reds', 'solar', 'spectral', 'speed', 'sunset', 'sunsetdark', 'teal',
 'tealgrn', 'tealrose', 'tempo', 'temps', 'thermal', 'tropic', 'turbid',
 'turbo', 'twilight', 'viridis', 'ylgn', 'ylgnbu', 'ylorbr', 'ylorrd']