はじめに
3Dデータでは、点(測定値)とライン(軌跡)が同時に現れるケースが多い。センサー軌道と計測点、ロボットの動作パスと観測データ、粒子の位置と移動ライン、時系列の点と補完軌跡など組み合わせはさまざま。これらを層構造として重ねれば、位置・流れ・傾向・外れ値まで一目で把握できるようになる。
この記事でできること
- 測定点(散布図)と軌跡ラインを同時に3D表示
- 点と線を"層"として重ねる構成
- 色・透明度・大きさで役割を分離し、読みやすくする
- Colabでそのまま動くコードつき
① 例データ:軌跡ライン+測定点を用意
- らせん状の軌跡(ライン)
- 軌跡上にノイズを足した測定点(ポイント)
import plotly.graph_objects as go
import numpy as np
t = np.linspace(0, 6*np.pi, 300)
# 軌跡ライン(理想軌道)
x_line = np.sin(t)
y_line = np.cos(t)
z_line = t * 0.2
# 測定点(ノイズ入り)
noise = 0.15
x_points = x_line + np.random.randn(len(t)) * noise
y_points = y_line + np.random.randn(len(t)) * noise
z_points = z_line + np.random.randn(len(t)) * noise
② "層構造"で描画:まずは軌跡ライン
fig = go.Figure()
# 軌跡ライン(下層)
fig.add_trace(go.Scatter3d(
x=x_line, y=y_line, z=z_line,
mode="lines",
line=dict(color="black", width=5),
name="Trajectory"
))
- 太めの黒いラインで "基準となる軌道" を描く
- これが「最下層」
③ 次に測定点を重ねる(中層)
fig.add_trace(go.Scatter3d(
x=x_points, y=y_points, z=z_points,
mode="markers",
marker=dict(
size=4,
color=z_points,
colorscale="Viridis",
opacity=0.7
),
name="Measured Points"
))
- 測定点を"上層"に置いて、軌跡ラインと分離
- opacity を 0.7 にすると重なりが見やすい
④ 層をさらに分ける:外れ値だけ別レイヤー(上層)
例として Z軸方向に外れた点を強調する。
mask = np.abs(z_points - z_line) > 0.2
fig.add_trace(go.Scatter3d(
x=x_points[mask],
y=y_points[mask],
z=z_points[mask],
mode="markers",
marker=dict(size=7, color="red", symbol="diamond"),
name="Outliers"
))
- **"中層(通常点)"と"上層(外れ値)"**という 明確な層構造 ができる
- 測定システムの異常検知例として効果的
⑤ 背景を整えると層がより理解しやすくなる
fig.update_layout(
scene=dict(
xaxis=dict(backgroundcolor="rgb(245,245,245)"),
yaxis=dict(backgroundcolor="rgb(245,245,245)"),
zaxis=dict(backgroundcolor="rgb(250,250,250)"),
aspectmode="data"
),
title="Trajectory + Measurement Points (Layered Structure)"
)
fig.show()
結果:
- グレー背景 → 色の"層"の違いが際立つ
- 遠近感が強調され、軌跡と測定点の関係が理解しやすい
⑥ 層構造をより明確にするテクニック(応用)
ラインは太く、点は小さくすることで役割がひと目で分かる。透明度はラインを1.0、通常点を0.6、外れ値は1.0にして強弱を付けると見やすい。軌跡は黒などの単色、測定点は値で色分け、外れ値は赤で強調すると判別しやすい。さらに Bounding Box を合わせれば、データの広がりや領域まで直感的につかめる。
トラブルシュート
点と線が重なって見えない
→ ラインを太く、点を小さく
色が混ざる
→ 測定点を半透明に
点の数が多くて重い
→ t を間引く、または点を subsample
軸が歪む
→ aspectmode="data" を確認してみる
まとめ
測定点と軌跡ラインを重ねると、データ同士のつながりが立体的に見えてくる。通常点・外れ値・基準軌道といったレイヤーを分ければ、役割がひと目で判別しやすい。ラインは太め、点は小さめで透明度をつけ、外れ値は別色にすると視認性が大きく向上する。
センサー軌跡やロボット制御、時系列の3D分析にも有効で、立体の“層”が構造理解を強く後押ししてくれる。
解説動画
参考情報






