1
1

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データの関係性を立体的に理解する

Posted at

はじめに

3Dデータでは、点(測定値)とライン(軌跡)が同時に現れるケースが多い。センサー軌道と計測点、ロボットの動作パスと観測データ、粒子の位置と移動ライン、時系列の点と補完軌跡など組み合わせはさまざま。これらを層構造として重ねれば、位置・流れ・傾向・外れ値まで一目で把握できるようになる。

intro_diagram.png

この記事でできること

  • 測定点(散布図)と軌跡ラインを同時に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"
))

newplot (21).png

  • 太めの黒いラインで "基準となる軌道" を描く
  • これが「最下層」

③ 次に測定点を重ねる(中層)

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

newplot (22).png

  • 測定点を"上層"に置いて、軌跡ラインと分離
  • 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"
))

newplot (23).png

  • **"中層(通常点)""上層(外れ値)"**という 明確な層構造 ができる
  • 測定システムの異常検知例として効果的

⑤ 背景を整えると層がより理解しやすくなる

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

newplot (24).png

結果:

  • グレー背景 → 色の"層"の違いが際立つ
  • 遠近感が強調され、軌跡と測定点の関係が理解しやすい

⑥ 層構造をより明確にするテクニック(応用)

newplot (26).png

ラインは太く、点は小さくすることで役割がひと目で分かる。透明度はラインを1.0、通常点を0.6、外れ値は1.0にして強弱を付けると見やすい。軌跡は黒などの単色、測定点は値で色分け、外れ値は赤で強調すると判別しやすい。さらに Bounding Box を合わせれば、データの広がりや領域まで直感的につかめる。

トラブルシュート

点と線が重なって見えない

→ ラインを太く、点を小さく

色が混ざる

→ 測定点を半透明に

点の数が多くて重い

→ t を間引く、または点を subsample

軸が歪む

→ aspectmode="data" を確認してみる

まとめ

summary_diagram (2).png

測定点と軌跡ラインを重ねると、データ同士のつながりが立体的に見えてくる。通常点・外れ値・基準軌道といったレイヤーを分ければ、役割がひと目で判別しやすい。ラインは太め、点は小さめで透明度をつけ、外れ値は別色にすると視認性が大きく向上する。

センサー軌跡やロボット制御、時系列の3D分析にも有効で、立体の“層”が構造理解を強く後押ししてくれる。

解説動画

参考情報

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?