この記事で学べること#
- Plotly.jsの基本的な使い方
- CDNからのPlotly.jsライブラリ読み込み方法
- 3D scatter/lineプロットの実装方法
- JSBSimシミュレーションデータ(x, y, z座標)の可視化
- scene設定による3D空間のカスタマイズ
対象読者#
- JavaScript基礎知識がある方
- JSBSimシミュレーションデータを可視化したい方
- Plotly.js(JavaScript版)の情報を探している方
- WebブラウザでインタラクティブなGraphを作りたい方
Web上にはPython版Plotly(plotly.py)の情報は豊富にありますが、JavaScript版(Plotly.js)の日本語情報は少ないのが現状です。
本記事では、JSBSimシミュレーションデータを例に、Plotly.jsで3D軌道プロットを作成する基本的な方法を解説します。
Plotly.jsとは?#
オープンソースのインタラクティブグラフライブラリ#
Plotly.jsは、インタラクティブな2D/3DグラフをWebブラウザ上に描画するJavaScriptライブラリです。MIT ライセンスで公開されており、商用・非商用問わず無料で利用できます。
マウス操作で回転・拡大・縮小が可能なため、データの可視化に非常に有効です。
Python版Plotlyとの違い#
Python版Plotly(plotly.py)は、Pythonでグラフを作成し、HTMLとして出力します。一方、Plotly.jsはJavaScriptで直接グラフを作成します。
Webアプリケーションに組み込む場合や、ブラウザ上でリアルタイムにデータを可視化する場合は、Plotly.jsが適しています。
Plotly.jsのセットアップ#
CDNからのライブラリ読み込み#
Plotly.jsを使用するには、HTMLの<head>タグ内にCDNリンクを追加します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Plotly.js 3D軌道プロット</title>
<!-- Plotly.jsライブラリをCDNから読み込み -->
<script src="https://cdn.plot.ly/plotly-2.26.0.min.js"></script>
</head>
<body>
<!-- グラフを表示するdiv要素 -->
<div id="plot3d"></div>
<!-- JavaScriptコードは後述 -->
<script>
// ここにPlotly.jsのコードを記述
</script>
</body>
</html>ポイント:
- CDNを使用することで、ローカルにファイルをダウンロードせずに利用できます
- バージョン番号(例: 2.26.0)は、最新版に適宜更新してください
- グラフを表示するための
<div id="plot3d"></div>を用意します
3D scatter plotの基本実装#
traceデータの定義#
Plotly.jsでは、trace(トレース)と呼ばれるデータオブジェクトでグラフの内容を定義します。
// サンプルデータ(JSBSimシミュレーション結果を想定)
const xs = [0, 10, 20, 30, 40, 50]; // Y座標 (m)
const ys = [0, 5, 10, 15, 20, 25]; // X座標 (m)
const zs = [100, 105, 110, 108, 102, 95]; // 高度 (m)
// 3D scatter traceの定義
const trace3d = {
x: xs, // X軸データ
y: ys, // Y軸データ
z: zs, // Z軸データ
mode: 'lines+markers', // 線とマーカーの両方を表示
type: 'scatter3d', // 3Dプロットタイプ
line: {
color: 'blue', // 線の色
width: 3 // 線の太さ
},
marker: {
size: 4, // マーカーのサイズ
color: 'red' // マーカーの色
}
};重要な設定項目:
type: 'scatter3d'- 3Dプロットを指定mode: 'lines+markers'- 線とマーカーの両方を表示('lines'のみ、'markers'のみも可能)x,y,z- 3次元座標データ(配列)
layoutの設定#
layout(レイアウト)で、グラフ全体の見た目を設定します。
const layout3d = {
title: '3D 軌道プロット', // グラフタイトル
scene: {
xaxis: {
title: 'Y (m)', // X軸ラベル
showgrid: true, // グリッド線を表示
gridcolor: '#cfd8dc' // グリッド線の色
},
yaxis: {
title: 'X (m)', // Y軸ラベル
showgrid: true,
gridcolor: '#cfd8dc'
},
zaxis: {
title: 'Altitude (m)', // Z軸ラベル
showgrid: true,
gridcolor: '#cfd8dc'
}
},
height: 700 // グラフの高さ(ピクセル)
};scene設定のポイント:
- 3Dプロットでは、
sceneオブジェクト内に軸設定を記述します xaxis,yaxis,zaxisで各軸の見た目をカスタマイズshowgridでグリッド線の表示/非表示を切り替え
Plotly.newPlot()でグラフを描画#
// グラフを描画
Plotly.newPlot('plot3d', [trace3d], layout3d);Plotly.newPlot()の引数:
'plot3d'- グラフを表示する<div>要素のID[trace3d]- traceデータの配列(複数のtraceを重ねて表示可能)layout3d- layoutオブジェクト
JSBSimデータの可視化例#
実際のシミュレーションデータを使用#
JSBSimシミュレーション結果のCSVファイルから、X, Y, Z座標を読み込んで可視化する例です。
// CSVファイルから読み込んだデータ(例)
const simulationData = {
time: [0.0, 0.1, 0.2, 0.3, 0.4], // 時刻 (s)
xs: [0, 1.5, 3.2, 5.1, 7.3], // Y座標 (m)
ys: [0, 0.5, 1.1, 1.8, 2.6], // X座標 (m)
zs: [100, 101, 102, 103, 104] // 高度 (m)
};
// 時刻でカラーマップを作成
const trace3d = {
x: simulationData.xs,
y: simulationData.ys,
z: simulationData.zs,
mode: 'lines+markers',
type: 'scatter3d',
line: {
color: simulationData.time, // 時刻で色分け
colorscale: 'Viridis', // カラーマップ
width: 4,
colorbar: {
title: 'Time (s)' // カラーバーのタイトル
}
},
marker: {
size: 2
}
};
const layout3d = {
title: 'JSBSim 3D軌道',
scene: {
xaxis: { title: 'Y (m)' },
yaxis: { title: 'X (m)' },
zaxis: { title: 'Altitude (m)' }
},
height: 700
};
Plotly.newPlot('plot3d', [trace3d], layout3d);カラーマップの活用:
line.colorに数値配列を指定すると、値に応じた色分けが可能colorscaleで配色を選択(‘Viridis’, ‘Jet’, ‘Hot’ 等)colorbarでカラーバーの設定が可能
アスペクト比の調整#
3D空間のアスペクト比を調整することで、データの見え方を改善できます。
const layout3d = {
title: '3D 軌道(等尺表示)',
scene: {
xaxis: { title: 'Y (m)', range: [0, 100] },
yaxis: { title: 'X (m)', range: [0, 100] },
zaxis: { title: 'Altitude (m)', range: [0, 150] },
aspectmode: 'manual', // 手動でアスペクト比を設定
aspectratio: {
x: 1, // X軸の相対的な長さ
y: 1, // Y軸の相対的な長さ
z: 1.5 // Z軸の相対的な長さ(1.5倍)
}
},
height: 700
};aspectmodeの設定:
'auto'- 自動調整(デフォルト)'cube'- 立方体'data'- データ範囲に基づく'manual'-aspectratioで手動設定
マウス操作によるインタラクティブな表示#
Plotly.jsで作成したグラフは、以下のマウス操作が可能です。
- ドラッグ: 視点の回転
- スクロール: ズームイン/アウト
- ダブルクリック: リセット
- 右上のツールバー: ズーム、パン、リセット等のツール
これにより、データを様々な角度から観察できます。
まとめ#
本記事では、Plotly.jsを使った3D軌道プロットの基本的な実装方法を解説しました。
重要なポイント:
- CDNから簡単にPlotly.jsを読み込める
traceでデータ、layoutで見た目を定義type: 'scatter3d'で3Dプロットを作成Plotly.newPlot()で描画- マウス操作でインタラクティブに表示
次のステップとして、アニメーション機能(Frames API)を使った軌道の時系列表示に挑戦してみましょう。
参照資料#
本記事の執筆にあたり、以下の資料を参照しました [@plotly_js_docs_3d_scatter_2025; @plotly_js_github_2025]。