D3.js
ディースリー ジェーエス
D3.js(Data-Driven Documents)は、データをDOM(主にSVG)に結び付けて、グラフや図表などの可視化表現を柔軟に実装できるJavaScriptライブラリです。棒グラフや折れ線といった定番のグラフだけでなく、独自の図形・レイアウト・アニメーションも設計できます。一般的なグラフやチャートの形式にとらわれず、データの意味に合わせて「表現そのもの」を作り込みたい「インフォ・グラフィックス」コンテンツの制作に活用します。
歴史と背景
D3.jsは、データ可視化の分野で広く使われてきた定番ライブラリで、研究・報道・行政・企業ダッシュボードなど幅広い領域で採用されています。Web標準(HTML/SVG/CSS)を前提に、データと表示の対応関係をプログラムで記述できる点が支持され、サンプルや知見が長年蓄積されています。近年では「すぐ描ける」チャート・ライブラリは他にも多くありますが、D3.jsは「自由度と表現力」の面において突出しているライブラリです。
特徴
D3.jsの特徴は、データと表示要素を直接結び付ける設計にあります。データ配列を元にSVG要素(rect/line/pathなど)を生成・更新し、スケール(scale)や軸(axis)で数値を座標に変換して描画します。これにより、単なるグラフ生成ではなく、注釈、強調、フィルタ、ツールチップ、アニメーションなどを含めた「情報の伝え方」を細部まで制御することが可能です。ユーザー操作(ホバー、クリック、ドラッグ、ズーム)とも相性が良く、インタラクティブなデータ体験を作ることができます。D3.jsの公式サイトに掲載されているデモをいくつかご紹介します。
サンバースト(Sunburst)
「サンバースト(SUNBURST)」は、親子関係や階層構造(ツリー構造)を持つデータを円形で表現するチャート方式です。各セグメントの角度と面積で数値を表しているため、単純なツリ・ーチャートよりも視覚的にデータの内容と性質を表現することができます。
サークルパッキング(Circle Packing)
「サークルパッキング(Circle Packing)」も、階層構造(ツリー構造)扱うチャートですが、サンバースト(Sunburst)と違いデータの相関関係を円の入れ子で、数値を円の面積で表現します。細かな数値の比較には向かないかもしれませんが、データの親子関係はより直感的に表現できます。
地図(Map)とデータ
「インフォ・グラフィックス」や「データ・ビジュアライゼーション」分野の表現で最も多いのは「地図をベースにしたデータ表現」です。冒頭に掲載した日本地図は各県の人口を、上記のデモはアメリカ合衆国の各州の失業率を表現しています。報道番組や学校の教科書で見ない日はないとも言える「地図ベースのデータ」ですが、Webの強みはここにインタラクションを実装できる点です。D3.jsでは、見た目だけでなく動作も自由に設計することができます。
太陽の軌道(Solar Path)
上記はD3.jsを使った太陽の軌道に関するシミュレーションです。上部に入力した「緯度・経度」にあたる地球上の位置から見た、太陽の軌道の1年間の変化を確認することができます。緯度経度によって指定した位置が円の中心となり、円自身はその位置から見える地平線です。赤い曲線が時間ごとの太陽の位置を示したもので、上部のスクロールバーで指定した日の太陽の軌道となります。「Locale」ボタンを押すとブラウザから現在の位置情報を取得し、「Play」ボタンを押すと自動的に日付が送られて、1年間の太陽の軌道の変化がアニメーションでわかりやすく表現されます。
このデモはこれ自体が「コンテンツ」として成り立つものですが、D3.jsのパワーを実感てきるサンプルです。
D3.jsは「すぐ描ける」チャート・ライブラリのように設定だけで完成するものではないため、要件整理と設計が重要になります。例えば、何を比較させたいのか、どの粒度で見せたいのか、どこで強調すべきかによって実装方法は変わります。また、データ量が大きい場合は描画方式(SVGかCanvasか)や間引き、集計などの工夫も必要です。
BLOOM DESIGNでは、D3.jsのようなライブラリによる高度なデータ表現は、Web体験の品質に大きく寄与するものだと考えています。特に「文化・教育」の分野では、ユーザ操作によるデータの多面的な観察や深掘りは重要なアプローチであると捉えており、積極的な活用をご提案しています。