2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Plotlyで3Dグラフの背景色・網目・グリッド設定 - 奥行きのある3D表示に仕上げる

Last updated at Posted at 2025-11-14

はじめに

image.png

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()

デフォルトだと真っ白い背景に灰色グリッド。そのままでは立体感が伝わりにくい状態です。

image.png

背景色を設定して奥行きを出す

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空間の構造と奥行きが一目で分かります。

image.png

グリッド線とゼロ線を調整する

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)

白グリッド+黒ゼロ線で"空間の方向"が視覚的に明確になります。

image.png

グリッドの間隔とラベル設定

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 を使用してください。

image.png

背景とグリッドを統一したスタイルにする

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()

背景の色合いを統一すると、資料やスライドにそのまま使える仕上がりになります。

image.png

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 各軸面 軸ごとに個別設定可能

image.png

ティック数の制御

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空間の"奥行き方向"を自然に見せられます。

image.png

関数化して再利用(おすすめ)

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グラフにも統一感を持たせられます。

まとめ

image.png

背景色やグリッド線を適切に整えるだけで、3Dグラフの見やすさが一気に向上します。

  • 各軸の背景色、グリッド線の明暗、軸バランスをそろえるだけで歪みが減り、奥行きや立体感が自然に伝わる
  • Surface・Scatter・Lineなど、どの3Dタイプでも共通して使える基本設定

これらの設定を関数化しておけば、プロジェクト全体で統一感のある3Dビジュアルを素早く作成できます。

参考情報

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?