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']