システム開発
投稿日:

【コーディング屋のネタ帳】データ可視化はこれで決まり!散布図作成に役立つJavaScriptライブラリ5選

データをわかりやすく伝える方法のひとつに「グラフ」があります。本シリーズでは、さまざまなグラフの特徴や使い方を紹介し、Webサイトで簡単に使えるJavaScriptライブラリも解説しています。

これまでに、棒グラフ・円グラフ・折れ線グラフ・レーダーチャートを取り上げてきました。今回は、散布図(スキャッタープロット)に注目します。散布図は、2つの数値データをXY座標上に配置して、データの分布や関係性を視覚的に表現するグラフで、データの傾向や相関を見つけるのによく使われます。

この記事は、次のような人に向けて書いています。

  • Webサイトにグラフを取り入れたい新人エンジニア
  • 今使っているライブラリを別のものに変えようと考えている中級エンジニア
  • デザインにこだわったグラフを探しているWebデザイナー

「どのライブラリを使えばいいの?」 という疑問を解決できるよう、それぞれの特長を比較しながら説明するので、ぜひ参考にしてください!

散布図とは?

散布図(スキャッタープロット)は、2つの数値データをXY座標上に点としてプロットし、それらの関係性を視覚的に表現するグラフです。データの傾向や相関を分析する際に利用され、統計解析やマーケティング分析など幅広い分野で活用されています。

散布図の活用例

散布図は、以下のようなシーンでよく使われます。

  • データの関係性を調べる
    ・例:広告費と売上の関係を見る
    ・例:気温とアイスクリームの売上の関係を調べる
  • データの分布を知る
    ・例:学生のテストの点数分布
    ・例:製品の価格と販売数の関係
  • 異常値(外れ値)を発見する
    ・例:工場の品質管理で、不良品の発生パターンを探す
    ・例:顧客の購買データから特異な行動をするユーザーを見つける

散布図の種類

  • 基本の散布図:2つの数値データをXY座標上にプロットするシンプルな形式。
  • バブルチャート:データ点の大きさを変えて、もう1つのデータ要素を追加。
  • 色付き散布図:点の色を変えることで、データのグループを区別。
  • 回帰線付き散布図:データの傾向を示す直線(回帰線)を追加。

散布図のメリット・デメリット

メリット

  • データの関係性が一目でわかる:点の並び方で、データ同士の関連が直感的に見える。
  • データの分布を把握しやすい:点の密集具合で、どこにデータが多いかがわかる。
  • 異常値をすぐに発見できる:他の点と離れているデータがすぐに目につく。

デメリット

  • データが多すぎると見づらくなる:点が密集すると、個々のデータを判別しにくくなる。
  • 因果関係は判断できない:データの相関はわかるが、どちらが原因でどちらが結果かは判断できない。
  • カテゴリーごとの比較には向かない:棒グラフや円グラフのように、グループごとのデータ比較はしづらい。

JavaScriptライブラリを選ぶ際のチェックポイント

グラフをWebサイトに表示するためのライブラリは数多くありますが、選び方を間違えると使いづらかったり、目的に合わなかったりすることがあります。ライブラリ選定の際には下記6つのポイントをチェックすることをおすすめします。

  1. 導入のしやすさ
    初心者でもすぐに使えるかどうかは重要です。CDNを使って簡単に読み込めるものや、設定が少なくても動作するライブラリを選ぶとよいでしょう。
  2. カスタマイズ性
    デザインや色、アニメーションなどを柔軟に変更できるかを確認しましょう。ブランドやデザインテーマに合わせた調整が必要な場合は、カスタマイズ性の高いものがおすすめです。
  3. レスポンシブ対応
    スマホやタブレットなど、画面サイズが異なるデバイスでもきれいに表示されるかをチェックしましょう。特に、ビジネスサイトではモバイル対応が重要です。
  4. パフォーマンス
    表現するグラフにもよりますが、大規模データを扱う場合、表示速度やパフォーマンスも気にする必要があります。特にリアルタイムデータを表示する用途では、軽量で高速なライブラリが求められます。
  5. サポートとドキュメント
    公式サイトやGitHubでのサポート状況や、ドキュメントの充実度を確認しましょう。使い方がわからないときに参考になる情報があるかどうかは重要です。
  6. ライセンスと利用料
    利用規約やライセンス形態も確認しておきましょう。商用利用が可能かどうか、無料で使えるか、有料プランが必要かなどを事前にチェックすることが大切です。

おすすめライブラリ紹介

散布図をWebサイトで表示するために、さまざまなJavaScriptライブラリが利用できます。ここでは、特におすすめのライブラリを紹介します。

1 Chart.js

  • 公式URL: https://www.chartjs.org/
  • 特徴:軽量でシンプルなAPIを持ち、初心者でも扱いやすい。散布図も標準でサポートされており、設定がシンプル。HTML5 Canvas ベースで動作し、レスポンシブデザインに対応している。カスタマイズの幅が広く、デフォルトで美しいデザインが提供されているため、スタイリングの手間を省ける。
  • メリット
    ・導入が簡単で、少ないコードで散布図を描画できる。
    ・レスポンシブ対応で、画面サイズに応じた調整が自動で行われる。
    ・カスタマイズ性が高く、デザインの調整が容易。
  • デメリット
    ・高度なデータ処理やアニメーションには制限がある。
    ・大規模データの描画には向かない。

2 D3.js

  • 公式URL: https://d3js.org/
  • 特徴:データ駆動型の強力な可視化ライブラリ。SVGやCanvasを活用して動的なデータの描画が可能で、自由度が非常に高い。散布図のデータポイントにアニメーションやカスタムスタイルを適用できるため、視覚的にリッチなグラフが作成できる。ただし、基本的な散布図の作成にもある程度のコーディングが必要。
  • メリット
    ・データに応じた動的な散布図の描画が可能。
    ・カスタマイズの幅が広く、あらゆる種類のデータ可視化が可能。
    ・大規模データの処理能力が高い。
  • デメリット
    ・初心者には学習コストが高い。
    ・レスポンシブ対応は自分で実装する必要がある。

3 ApexCharts

  • 公式URL: https://apexcharts.com/
  • 特徴:美しいデザインと使いやすさを両立したグラフライブラリ。散布図のインタラクティブな表現が得意で、ツールチップやデータポイントのホバーエフェクトが標準搭載されている。Canvas ベースでスムーズな描画が可能であり、リアルタイムデータの更新にも対応。特に、アニメーションの洗練された動きが特徴。
  • メリット
    ・直感的なAPI設計で、導入が簡単。
    ・インタラクティブな散布図を作成できる。
    ・リアルタイムデータの可視化にも対応。
  • デメリット
    ・高度なカスタマイズには制限がある。
    ・D3.jsほどの自由度はない。

4 Plotly.js

  • 公式URL: https://plotly.com/javascript/
  • 特徴:インタラクティブなグラフ作成に特化したライブラリで、散布図に関しても豊富な機能を備えている。データポイントのツールチップ表示やドラッグによるズーム機能が標準でサポートされており、探索的データ分析にも適している。WebGL を利用した 3D散布図も作成可能で、Pythonなどの他の言語とも統合できる点が強み。
  • メリット
    ・散布図のズームやホバー時の詳細表示が可能。
    ・Pythonなど他の言語との互換性がある。
    ・3D散布図の描画も可能。
  • デメリット
    ・他のライブラリに比べるとファイルサイズが大きい。
    ・大規模データではややパフォーマンスが低下する。

5 ECharts

  • 公式URL: https://echarts.apache.org/
  • 特徴:大規模データ向けに最適化されたパワフルな可視化ライブラリ。WebGL を活用しており、大量のデータポイントを高速に描画できる。散布図に関しても、バブルチャートや回帰分析と組み合わせた高度な可視化が可能。インタラクティブ機能が豊富で、データフィルタリングやアニメーション付きのトランジションなどが利用できる点が特徴。
  • メリット
    ・散布図のアニメーションやインタラクティブ要素が豊富。
    ・高パフォーマンスで、大量のデータポイントを処理可能。
    ・バブルチャートや回帰分析のサポートも充実。
  • デメリット
    ・設定オプションが多いため、初心者にはやや複雑。
    ・公式ドキュメントの一部が中国語で提供されているため、英語の情報が不足することがある。

ライブラリ比較表

前述のライブラリ選定ポイントをまとめた表は下記のとおり

名称導入のしやすさカスタマイズ性レスポンシブ対応パフォーマンスサポートとドキュメントライセンス
Chart.js簡単中程度標準対応軽量・高速公式ドキュメント充実
サンプル多数
MITライセンス
D3.js難しい非常に高い手動対応大規模データ対応可能公式ドキュメントが詳細
学習コストが高め
BSDライセンス
ApexCharts簡単高い標準対応高速・リアルタイム対応公式ドキュメントが分かりやすく、サンプルも豊富MITライセンス
Plotly.js普通高い標準対応データ量が増えるとやや負荷公式ドキュメントが詳しく、Python版との互換性もありMITライセンス
ECharts普通非常に高い標準対応大規模データとリアルタイム更新に最適公式ドキュメントが詳細だが、一部中国語ベースApache 2.0

各ライブラリにはそれぞれ特長があり、用途によって適したものを選ぶことが重要です。例えば、手軽に実装したいなら Chart.js や ApexCharts、大規模データの可視化なら ECharts、インタラクティブな機能を活用するなら Plotly.js、自由なカスタマイズを求めるなら D3.js といった選択が可能です。

サンプルデータを使った導入例

今回紹介した各ライブラリを使って、同じ条件のサンプルデータからレーダーチャートを表示する手順を作成してみました。それぞれの特徴を活かしたオプションもつけてみたので参考にしてくださいね。

サンプルデータ:ユーザーの年齢とサイト滞在時間の関係

ユーザーID年齢サイト滞在時間(分)備考
U001223.5初回訪問
U002358.0常連ユーザー
U003285.5
U0044512.0購入あり
U005317.2
U006274.8
U007409.1購入あり
U008233.8初回訪問

このサンプルデータは、ウェブサイトのユーザーの年齢とサイト滞在時間の関係性を視覚的に把握するために利用できます。

今回は、このデータを下記のような、共通のJSONデータとして扱っていきます。
(そのため、各ライブラリのコード部ではデータの記述は割愛しています)

Chart.js

導入手順

1.CDNリンクの追加 (HTMLの<head>内に記述)

2.HTMLとJavaScriptコード

解説・ポイント

  1. Chart.js のメリット
    • シンプルな設定: 基本的なグラフを簡単なコードで作成でき、初心者からプロフェッショナルまで幅広く利用されています。
    • レスポンシブデザイン: 自動的にレスポンシブ対応となるため、さまざまなデバイスでの表示が容易です。
    • アニメーションとインタラクション: 内蔵のアニメーション効果やツールチップなどのインタラクション機能により、ユーザーにとって視覚的に魅力的なグラフが作成可能です。
  2. グラフの基本設定
    • グラフタイプ: Chart.js のオプションで type: 'scatter' を指定することで散布図が描画されます。
    • データセット: datasets プロパティにより、表示するデータ点の配列と、グラフタイトル、背景色、点の大きさなどのスタイルを定義します。
  3. ツールチップのカスタマイズ
    • plugins.tooltip.callbacks を利用して、データ点にマウスオーバーした際に詳細な情報(例:年齢と滞在時間)をわかりやすく表示するカスタムフォーマッタを実装しています。

D3.js

導入手順

1.CDNリンクの追加 (HTMLの<head>内に記述)

2.CSSを追加
3.HTMLとJavaScriptコード

解説・ポイント

  1. アニメーションの実装
    • データ点は初期状態で半径 0 の状態から、transition() を利用して 1000ms かけて半径 5 に拡大され、グラフに「登場」するようなアニメーション効果を実現しています。
  2. インタラクションとツールチップ
    • 各データ点には mouseover および mouseout イベントを設定。マウスオーバー時に対象のデータ点が拡大し、色が変化することでユーザーに注目させる効果があります。
    • さらに、マウスオーバー時にはツールチップを表示し、詳細な情報(ユーザーID、年齢、サイト滞在時間、備考)をわかりやすく提示しています。

ApexCharts

導入手順

1.CDNリンクの追加
2.CSSを追加
3.HTMLとJavaScriptコード

解説・ポイント

  1. 美しいデザインと直感的なAPI
    • ApexChartsは、デフォルトで洗練されたデザインが適用されるため、コード量を最小限に抑えながらも視覚的に魅力的な散布図を作成できます。シンプルなオプション設定で、初心者でもすぐに利用可能です。
  2. インタラクティブな機能
    • ツールチップやホバーエフェクトが標準搭載されており、ユーザーがデータポイントにマウスオーバーした際に、詳細情報(例えば、年齢やサイト滞在時間)が即座に表示されます。これにより、データの理解が深まり、ユーザーエクスペリエンスが向上します。
  3. 滑らかなアニメーション
    • グラフの初期描画時やデータ更新時に、滑らかなアニメーション効果が自動的に適用されるため、リアルタイムデータの変化にも自然に対応できる設計となっています。実際の運用では、動的なデータ更新を活かしてダッシュボードなどにも応用できます。
  4. リアルタイムデータ更新の容易さ
    • ApexChartsはAPI経由でのリアルタイムデータ更新が容易に行える設計となっており、chart.updateSeries() などのメソッドを使えば、データの変更に伴い即座にグラフの更新が反映されます。今回のコードでは直接の例は含まれていませんが、実装は非常にシンプルです。

Plotly.js

導入手順

1.CDNリンクの追加 (HTMLの<head>内に記述)
2.HTMLとJavaScriptコード

解説・ポイント

  1. インタラクティブ性の高さ
    • Plotly.js はデフォルトでデータポイントのホバー時に詳細なツールチップを表示する機能を備えており、ユーザーが各点にマウスオーバーすることで、瞬時に情報を把握できます。また、ドラッグ操作によるズームやパン機能も標準でサポートされているため、探索的データ分析に非常に適しています。
  2. 柔軟なズーム・パン機能
    • グラフ上でのズームやパン操作が直感的に行えるため、大規模なデータセットや密度の高いデータポイントの視認性向上に貢献します。ユーザーは関心のある部分に焦点を絞り、詳細な検討が可能です。

ECharts

導入手順

1.CDNリンクの追加 (HTMLの<head>内に記述)
2.CSSの設定
2.HTMLとJavaScriptを追加

解説・ポイント

  1. 豊富なインタラクティブ機能
    • 基本的なツールチップ表示に加え、データのフィルタリング、ズーム・パン機能、さらにはデータの表示・編集(dataView)や初期状態へのリセット(restore)など、ユーザーがグラフと直接対話できる多彩なインタラクティブ機能が組み込まれています。
  2. アニメーション付きのトランジション
    • ECharts はアニメーション効果を標準装備しており、データの追加や更新時に視覚的なトランジションが適用されます。これにより、動的なデータ変化を直感的に把握できるほか、プレゼンテーション用途にも適しています。

まとめ

今回は、散布図の特徴や活用シーンを紹介し、Webサイトで簡単に描画できるおすすめのJavaScriptライブラリを比較しました。

散布図は、データの傾向や相関関係を視覚的に把握するのに役立つグラフです。今回紹介したライブラリを活用し、プロジェクトのニーズに合った最適なグラフを選んでくださいね。