D3.jsを用いてインタラクティブなデータビジュアライゼーションを作成

D3.jsを用いてインタラクティブなデータビジュアライゼーションを作成

D3.jsは、データを視覚的に表現するための強力なJavaScriptライブラリです。スケーラブルでインタラクティブなグラフやチャートを作成するためのツールセットを提供します。この記事では、D3.jsの基本から実践的な使用例までを詳細に解説します。

D3.jsとは

D3.jsは、データをDOMに結びつけて操作し、視覚化するためのライブラリです。SVG、Canvas、HTMLを用いてデータを表現できます。

D3.jsのインストール

CDN経由で利用する場合:

<script src="https://d3js.org/d3.v7.min.js"></script>

NPMを使用する場合:

npm install d3

基本的なデータのバインディング

D3.jsでは、データをDOM要素に結びつけることで視覚化します。

const data = [10, 20, 30, 40];
d3.select('body')
  .selectAll('div')
  .data(data)
  .enter()
  .append('div')
  .style('width', d => `${d * 10}px`)
  .style('background-color', 'steelblue')
  .text(d => d);

SVG要素の作成

SVGを使用してグラフやチャートを描画します。

const svg = d3.select('body')
  .append('svg')
  .attr('width', 500)
  .attr('height', 500);

svg.append('circle')
  .attr('cx', 250)
  .attr('cy', 250)
  .attr('r', 100)
  .style('fill', 'orange');

スケールの設定

スケールは、データを視覚化可能な範囲にマッピングするために使用します。

const scale = d3.scaleLinear()
  .domain([0, 100])
  .range([0, 500]);

console.log(scale(50)); // 250

軸の作成

D3.jsは、軸を簡単に作成するための機能を提供します。

const axis = d3.axisBottom(scale);

d3.select('svg')
  .append('g')
  .attr('transform', 'translate(0, 50)')
  .call(axis);

データ駆動型のグラフ作成

データをもとにバーグラフを描画します。

const data = [100, 200, 300, 400, 500];

svg.selectAll('rect')
  .data(data)
  .enter()
  .append('rect')
  .attr('x', (d, i) => i * 60)
  .attr('y', d => 500 - d)
  .attr('width', 50)
  .attr('height', d => d)
  .style('fill', 'teal');

インタラクティブなイベントの追加

マウスオーバーやクリックなどのイベントを追加します。

svg.selectAll('rect')
  .on('mouseover', function() {
    d3.select(this).style('fill', 'orange');
  })
  .on('mouseout', function() {
    d3.select(this).style('fill', 'teal');
  });

アニメーションの適用

D3.jsではアニメーションも簡単に実現できます。

svg.selectAll('rect')
  .transition()
  .duration(1000)
  .attr('y', d => 500 - d / 2)
  .attr('height', d => d / 2);

レスポンシブなデザイン

画面サイズに応じて調整可能なグラフを作成します。

const width = window.innerWidth;
const height = window.innerHeight;

const responsiveSvg = d3.select('body')
  .append('svg')
  .attr('width', width)
  .attr('height', height);

responsiveSvg.append('circle')
  .attr('cx', width / 2)
  .attr('cy', height / 2)
  .attr('r', 50)
  .style('fill', 'blue');

データの取得と処理

D3.jsを用いて外部データを取得し、グラフを描画します。

d3.json('data.json').then(data => {
  console.log(data);
});

複雑なチャートの作成

D3.jsを使えば、ヒートマップやツリーマップなど高度なチャートも作成可能です。

まとめ

D3.jsを使用すれば、データの視覚化が効率的に行えます。スケーラビリティやインタラクティブ性を活かし、魅力的なビジュアライゼーションを作成しましょう。