はじめに
3Dグラフはデータだけでなく「見やすさ」が大切。背景やグリッドの色を整えることで、奥行きや構造が自然に伝わります。今回はPlotlyの3Dグラフを"読みやすく美しく整える"基本設定を紹介します。
目的
- 3Dグラフの背景色・グリッド線・ゼロ線を設定する
- デフォルトの白背景を柔らかく整えて、立体感を出す
- 資料・発表でも映える3Dビジュアルを作る
実装例
import plotly.graph_objects as go
import numpy as np
# データ生成
x = np.linspace(-2, 2, 60)
y = np.linspace(-2, 2, 60)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# ベースの3D Surface
fig = go.Figure(data=[go.Surface(x=X, y=Y, z=Z, colorscale='Viridis')])
fig.update_layout(title="Default 3D Surface")
fig.show()
デフォルトだと真っ白い背景に灰色グリッド。そのままでは立体感が伝わりにくい状態です。
背景色を設定して奥行きを出す
fig.update_layout(
scene=dict(
xaxis=dict(backgroundcolor='rgb(220,220,245)'),
yaxis=dict(backgroundcolor='rgb(245,220,220)'),
zaxis=dict(backgroundcolor='rgb(220,245,220)'),
)
)
fig.show()
| 項目 | 内容 |
|---|---|
| backgroundcolor | 各軸面の背景色を指定(RGB値やHTML色) |
| scene.xaxis, scene.yaxis, scene.zaxis | 各軸設定ブロック |
| 色の使い分け | X軸は淡い青、Y軸は淡いピンク、Z軸は淡い緑で明確に区別 |
各軸面に異なる色味をはっきり持たせることで、3D空間の構造と奥行きが一目で分かります。
グリッド線とゼロ線を調整する
fig.update_layout(
scene=dict(
xaxis=dict(gridcolor='white', zerolinecolor='black', showbackground=True),
yaxis=dict(gridcolor='white', zerolinecolor='black', showbackground=True),
zaxis=dict(gridcolor='white', zerolinecolor='black', showbackground=True)
)
)
fig.show()
| 設定項目 | 説明 |
|---|---|
| gridcolor | グリッド(補助線)の色 |
| zerolinecolor | 原点を通る線の色 |
| showbackground | 軸面の背景を描くかどうか(True/False) |
白グリッド+黒ゼロ線で"空間の方向"が視覚的に明確になります。
グリッドの間隔とラベル設定
fig.update_layout(
scene=dict(
xaxis=dict(
tickmode='auto', # nticksを有効にするために必要
nticks=5, # 最大5個程度のティックを目安に自動調整
tickfont=dict(size=10, color='gray'),
title=dict(text='X軸', font=dict(size=12, color='black'))
),
yaxis=dict(
tickmode='auto',
nticks=5,
tickfont=dict(size=10, color='gray'),
title=dict(text='Y軸', font=dict(size=12, color='black'))
),
zaxis=dict(
tickmode='auto',
nticks=5,
tickfont=dict(size=10, color='gray'),
title=dict(text='Z軸', font=dict(size=12, color='black'))
)
)
)
| 項目 | 内容 |
|---|---|
| tickmode | ティックの配置方法('auto'/'linear'/'array') |
| nticks | 最大ティック数の目安(tickmode='auto'時のみ有効。実際の数は自動調整される) |
| tickfont | 軸の目盛り数字のフォントサイズ・色 |
| title | 軸ラベル(軸名)の設定 |
目盛り数字のトーンを下げつつ、軸ラベルを追加することで、データそのものが際立ちます。
注意:
nticksは厳密な数ではなく、Plotlyが見やすさを考慮して自動調整します。正確な制御が必要な場合はtickmode='array'とtickvalsを使用してください。
背景とグリッドを統一したスタイルにする
fig.update_layout(
scene=dict(
xaxis=dict(backgroundcolor='rgb(235,235,240)', gridcolor='white', zerolinecolor='black'),
yaxis=dict(backgroundcolor='rgb(235,235,240)', gridcolor='white', zerolinecolor='black'),
zaxis=dict(backgroundcolor='rgb(245,245,250)', gridcolor='white', zerolinecolor='black'),
aspectmode='data'
),
paper_bgcolor='white', # グラフ外側の背景色
# 注: 3Dグラフでは plot_bgcolor は機能しません
# 背景色は scene.xaxis.backgroundcolor 等で設定します
title="3D Graph with Unified Style"
)
fig.show()
背景の色合いを統一すると、資料やスライドにそのまま使える仕上がりになります。
3Dグラフ特有の注意点
背景色の設定方法
2Dグラフで使う plot_bgcolor は3Dグラフでは機能しないようです。
3D空間の背景色は以下の方法で設定します:
fig.update_layout(
scene=dict(
bgcolor='lightgray', # 3D空間全体の背景色
xaxis=dict(backgroundcolor='rgb(240,240,240)'), # X軸面の背景色
yaxis=dict(backgroundcolor='rgb(240,240,240)'), # Y軸面の背景色
zaxis=dict(backgroundcolor='rgb(250,250,250)') # Z軸面の背景色
),
paper_bgcolor='white' # グラフ外側の背景色(これは機能する)
)
| 設定項目 | 対象 | 効果 |
|---|---|---|
paper_bgcolor |
グラフ外側の余白 | 3Dでも有効 |
plot_bgcolor |
プロット領域(2D専用) | ⚠️ 3Dでは無効 |
scene.bgcolor |
3D空間全体 | 3D専用の背景色 |
scene.xaxis.backgroundcolor |
各軸面 | 軸ごとに個別設定可能 |
ティック数の制御
nticks は厳密な数ではなく、最大値の目安です。Plotlyが自動的に見やすい数に調整します。
# 自動調整(推奨)
xaxis=dict(tickmode='auto', nticks=5) # 最大5個程度を目安に自動調整
# 正確な制御が必要な場合
xaxis=dict(
tickmode='array',
tickvals=[0, 0.5, 1.0, 1.5, 2.0], # 正確な位置を指定
ticktext=['0', '0.5', '1', '1.5', '2'] # 表示テキストも指定可能
)
スタイル例:グレー背景で奥行きを強調
fig.update_layout(
scene=dict(
xaxis=dict(backgroundcolor='rgba(230,230,230,1)', gridcolor='white'),
yaxis=dict(backgroundcolor='rgba(230,230,230,1)', gridcolor='white'),
zaxis=dict(backgroundcolor='rgba(245,245,245,1)', gridcolor='white'),
),
paper_bgcolor='rgba(250,250,250,1)'
)
「白→グレー→淡グレー」と明度を変えることで、3D空間の"奥行き方向"を自然に見せられます。
関数化して再利用(おすすめ)
def set_3d_style(fig, title="Styled 3D Graph"):
fig.update_layout(
title=title,
scene=dict(
xaxis=dict(
backgroundcolor='rgb(240,240,240)',
gridcolor='white',
zerolinecolor='black',
tickmode='auto',
nticks=5
),
yaxis=dict(
backgroundcolor='rgb(240,240,240)',
gridcolor='white',
zerolinecolor='black',
tickmode='auto',
nticks=5
),
zaxis=dict(
backgroundcolor='rgb(250,250,250)',
gridcolor='white',
zerolinecolor='black',
tickmode='auto',
nticks=5
),
aspectmode='data'
),
paper_bgcolor='white'
)
return fig
SurfaceやScatterなど、どの3Dグラフにも統一感を持たせられます。
まとめ
背景色やグリッド線を適切に整えるだけで、3Dグラフの見やすさが一気に向上します。
- 各軸の背景色、グリッド線の明暗、軸バランスをそろえるだけで歪みが減り、奥行きや立体感が自然に伝わる
- Surface・Scatter・Lineなど、どの3Dタイプでも共通して使える基本設定
これらの設定を関数化しておけば、プロジェクト全体で統一感のある3Dビジュアルを素早く作成できます。
参考情報








