Table of Contents
データ可視化のためのD3.jsの理由
データの視覚化は、生の数字と人間の理解のギャップを埋めます。利用可能な多くのツールの中で、D3.js(データ駆動文書)は、開発者がドキュメントオブジェクトモデル(DOM)を直接制御することを可能にする、多様で低レベルのJavaScriptライブラリとして際立っています。限られたカスタマイズを提供する高レベルのチャートライブラリとは異なり、D3は、複雑な地理マップやネットワーク図に、必要な視覚表現を正確に作成することができます。そのデータ結合モデルは、任意のデータ設定や最適化の要素を最適化し、さまざまなデータを最適化し、最適なデータを最適化し、さまざまなデータを最適化することを可能にします。
D3.jsのコアコンセプト
D3を効果的に活用するには、その基礎原則を理解しなければなりません。選択、データ結合、スケール、SVG。 D3は、DOM要素の選択、それらへの結合データ、および変換を適用することによって動作します。 このパターンは、メソッドのチェーンを通して表現され、単純な例で説明されています。
選択とデータ結合
D3 は CSS セレクタを使用して、対象要素にデータを添付します。 メソッドは、選択したノードで値の配列に結合し、 メソッドは、対応する DOM ノードが欠けているデータポイントの新しい要素を作成します。 この入植パターンは、動的データセットを効率的に処理できます。
例えば、データセット用の円を作成する:
const data = [10, 25, 40, 30];
const svg = d3.select("body").append("svg")
.attr("width", 400)
.attr("height", 200);
svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("cx", (d, i) => i * 100 + 50)
.attr("cy", 100)
.attr("r", d => d)
.attr("fill", "steelblue");
スケールと軸
生データは、ピクセル座標に直接マップしない範囲に及ぶことが多い。 D3 は ] スケール] を範囲(ピクセル位置)にマップする。 一般的なスケールには、、]、] が含まれている。 Axes は ] または を組み合わせて生成される。 任意の形式は、任意の形式と任意の形式をスケールと任意の形式化します。
リニアスケールの例:
const xScale = d3.scaleLinear()
.domain([0, d3.max(data)])
.range([0, width]);
const yScale = d3.scaleLinear()
.domain([0, d3.max(data)])
.range([height, 0]);
const xAxis = d3.axisBottom(xScale);
svg.append("g")
.attr("transform", `translate(0, ${height})`)
.call(xAxis);
D3.js を用いたインタラクティブな可視化の構築
対話は、静的なチャートを探索可能なストーリーに変えます。 D3はイベントハンドラ、トランジション、およびダイナミックなアップデートをサポートしています。 ツールチップ、ズーム、ドラッグ、フィルタリング、アニメーションを最小限のオーバーヘッドで追加できます。 以下では、ツールチップの展開や、一般的なインタラクティブ機能を紹介します。
ツールチップとハイライト
Tooltipsは、ホバーに正確なデータ値を提供します。 D3のイベントシステムを使用すると、詳細を示すフローティングを作成できます。 たとえば、ツールチップ付きのバーチャートを既に元のコードに表示していました。 ここでは、ホバーに色の変更を追加することもできます。
svg.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("x", (d, i) => i * 70)
.attr("y", d => height - d * 3)
.attr("width", 50)
.attr("height", d => d * 3)
.attr("fill", "steelblue")
.on("mouseover", function(event, d) {
d3.select(this).attr("fill", "orange");
tooltip.style("display", "block").text(`Value: ${d}`);
})
.on("mousemove", (event) => {
tooltip.style("left", (event.pageX + 10) + "px")
.style("top", (event.pageY - 20) + "px");
})
.on("mouseout", function() {
d3.select(this).attr("fill", "steelblue");
tooltip.style("display", "none");
});
ズーム&パン
大規模なデータセットや時間系列データの場合、ズームとパンニングのヘルプユーザーは、関心のある領域に焦点を当てます。 D3のの動作は、座標系を変換します。 視覚要素を含むSVGグループにそれを適用します。
const zoom = d3.zoom()
.scaleExtent([1, 10])
.on("zoom", (event) => {
g.attr("transform", event.transform);
});
svg.call(zoom);
動的データ更新
インタラクティブなダッシュボードは、ページをリロードすることなくデータを更新する必要があります。 D3の更新パターンは、要素の追加、削除、および変更を適切に処理します。 キーは、新規データと結合を再実行し、追加のノードにを使用することです。
function updateData(newData) {
const circles = svg.selectAll("circle").data(newData);
circles.exit().remove(); // remove old
circles.enter().append("circle") // add new
.merge(circles) // merge with existing
.attr("cx", (d, i) => i * 100 + 50)
.attr("cy", 100)
.attr("r", d => d);
}
高度なD3テクニック
レイアウトと地理的可視化
D3には、複雑なチャート用の特殊なレイアウトモジュールが搭載されています。[]は、パイ/ラジアルデータを作成しました。[は、ネットワークグラフの物理をシミュレートし、]]プロジェクトは、GeoJSONを使用してデータをマッピングします。 これらのモジュールは、洗練された視覚化に必要なコードを大幅に削減します。 例えば、強制指向ネットワークを作成する:
const simulation = d3.forceSimulation(nodes)
.force("link", d3.forceLink(links))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(width / 2, height / 2));
トランジションとアニメーション
スムーズな移行により、ユーザーエクスペリエンスが向上します。 D3 の は、属性が時間とともに変化します。 持続時間、増加、遅延をコントロールできます。 例えば、バーをアニメーション化して成長します。
svg.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("x", (d, i) => i * 70)
.attr("y", height)
.attr("width", 50)
.attr("height", 0)
.attr("fill", "steelblue")
.transition()
.duration(800)
.ease(d3.easeBounce)
.attr("y", d => height - d * 3)
.attr("height", d => d * 3);
生産準備のためのベストプラクティス - レディD3
パフォーマンスの最適化
大規模なデータセット(ポイントの3つ)では、直接 DOM 操作が遅くなります。canvas]] を使用して、D3 キャンバスを介してレンダリングするか、]] WebGL] を、 デッキのようなライブラリで使用してください。 SVG ベースのビジュアルでは、 グループを使用して DOM の複雑性を減らし、すべての要素をフレームに更新しないようにします。 と [FLT] キャッシュを処理します。 [FLT] と [FLT] 選択する] キャッシュ [FLT] と [FLT] は、 [FLT] キャッシュを処理します。 [FLT] 選択します。 [FLT] キャッシュ [FLT] と [FLT] キャッシュを処理します。 [FLT] と [FLT] キャッシュ ([FLT] キャッシュ ([FLT] キャッシュ ([FLT] キャッシュを処理します。 [FLT] キャッシュを処理します。 [FLT] キャッシュ ([FLT]
アクセシビリティと責任
視覚化は、すべてのユーザーが認識できるようにする必要があります。SVG要素の[タグを提供し、ARIA属性を使用して、テキストベースのテーブルをフォールバックとして含めます。レスポンシブ設計では、コンテナの幅のSVG寸法を]に基づいており、D3でウィンドウのサイズ変更イベントを聴く。
function resize() {
const width = container.node().getBoundingClientRect().width;
svg.attr("width", width)
.attr("height", width * aspectRatio);
// redraw scales and axes
}
window.addEventListener("resize", resize);
組織図
単一ページアプリケーションでも、D3 コードをモジュールに構造化します。データ取得、スケール/アックス、描画用1、インタラクション用1。ES6 モジュールやWebpack のようなバンドラーを使用してください。フレームワークのライフサイクルのホックとD3ロジックを直接混合しないでください。代わりに、フレームワークが呼び出すD3クラスを作成します。
モダンフレームワークでD3を統合
React、Angular、Vue は独自の DOM を管理します。 競合を避けるには、D3 のみの計算(スケール、図形)を使用し、フレームワークが SVG をレンダリングできるようにします。 あるいは、専用のラッパーを や のように使用してください。 しかし、フルコントロールのために、D3 を または (Angular) を root 要素のリファレンダーから保護します。 このフレームワークは、D3 を別のリファレンダーから保持します。
実世界事例とユースケース
D3は、多くの高プロファイルの視覚化プロジェクトを出力します。 ]D3ギャラリー(Observable)]は、アニメーションの作物からインタラクティブなタイムラインまで、数百のサンプルを展示します。 ニューヨークタイムズのようなニュース組織は、カスタムデータストーリーにD3を使用します。 企業設定では、D3は、金融データやリアルタイムのIoTセンサーフィード用のカスタムダッシュボードを可能にします。 その柔軟性は、単一の共同インターフェイスに複数のチャートタイプを組み合わせることができます。
例: ツールチップとブラシによるインタラクティブな散布ポロ
と500ポイントのデータセットをX、y、カテゴリで想像してみてください。 D3を使用すると、カテゴリ、正確な座標を示すツールチップ、選択したポイントを強調するブラシで円を彩るスキャッタープロットを作成できます。 コード構造は上のパターンに従います。 ブラシの相互作用は、以下のようなものになります。
const brush = d3.brush()
.extent([[0, 0], [width, height]])
.on("brush end", brushed);
svg.append("g").call(brush);
function brushed(event) {
if (event.selection) {
const [[x0, y0], [x1, y1]] = event.selection;
circles.classed("selected", d =>
x0 <= xScale(d.x) && xScale(d.x) <= x1 &&
y0 <= yScale(d.y) && yScale(d.y) <= y1
);
} else {
circles.classed("selected", false);
}
}
リソースと次のステップを学ぶ
D3をマスターするには、公式[]でD3.jsのドキュメントと上の無料のチュートリアル]で保存可能。 あなたがフォークできるライブコードを提供する展望台のノートブックを介して作業。 また、tter]] "Web用インタラクティブデータ可視化"Scott Murrayによって、徹底的な導入のために[FLT]を[FLT]、[FLT]]を変換]、[FLT]、[FLT]]を変換します。 チャートは、または[FLT]のチェックを[FLT]、[FLT]、[FLT]、[FLT]、[FLT]、[FLT]、[FLT]、[FLT]、[FLT]、[FLT]、[FLT]、[FLT]、[F]、[F]、[F]、[FLT]、[FLT]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[F]、[FLTF]、[F]、[F]、[FLT
コンテンツ
D3.jsは、ウェブ上でカスタムインタラクティブなデータ可視化のために金基準を維持します。その急な学習曲線は、比類のない柔軟性、パフォーマンス、コミュニティのサポートによってオフセットされます。そのコアコンセプトをマスターすることで、選択、データ結合、スケール、およびイベント処理など、データがインサイトに変わる視覚化を構築することができます。シンプルなバーチャートや複雑なマルチビューダッシュボードを作成している場合でも、D3は、生産準備、エンゲージメント、およびアクセス可能なビジュアル作成を行うためのツールを提供します。 開始、および小規模なガイド。