データの可視化・グラフ

データを視覚的に表現するためのUI要素やグラフライブラリの探求

このページでわかること

  • 棒グラフ・線グラフ・円グラフから、サンキーダイアグラム・ガントチャート・ヒートマップ・バイオリンプロットまで、20種類以上のチャートの違いと使い分け
  • Recharts・Nivo・ECharts・Plotly・Chart.js・ApexCharts・D3 など主要可視化ライブラリの実装比較
  • データ型(時系列・カテゴリ・階層・分布)・データ規模・インタラクティブ性によるライブラリ選定基準
  • SSR対応・レスポンシブ・アクセシビリティなど実装時の落とし穴

データ可視化UIとは

データ可視化は、数値や関係性を視覚化し、人が直感的に理解できる形で伝えるUI領域。表で見るより、グラフで見た方が傾向・異常・比較を素早く把握できる。

Reactエコシステムには、Recharts(コンポーネント指向)、Nivo(D3ベースの美麗さ)、ECharts/Plotly(多機能・科学系)、Chart.js(Canvas・軽量)、ApexCharts(モダンな見た目)、D3.js(完全カスタム)など多様な選択肢があり、データの性質と表現の要求度で選び分ける。

本ページでは、20種類以上のチャートを取り上げ、各ライブラリの実装と適性を比較する。

目的別の選び方

チャート種別

やりたいこと推奨チャート代替
数量の比較棒グラフ・積み上げ棒ドーナツ・ピラミッド
時系列の推移線・エリア・ローソク足棒(離散)
構成比円・ドーナツ・ツリーマップ積み上げ棒
相関関係散布図・バブルヒートマップ
分布ヒストグラム・箱ひげ・バイオリンヒートマップ
流れ・遷移サンキー・ファネルフローチャート
多次元比較レーダー・パラレル座標スターチャート
地理データコロプレス(人口地図)バブル地図
スケジュールガントタイムライン

ライブラリ選定

条件推奨ライブラリ
素早く綺麗に組み立てたいRecharts
デザインの美しさ重視Nivo
機能・チャート種類の豊富さECharts / Plotly
バンドルサイズを抑えたいChart.js(Canvas)
統計系・科学系Plotly
モダンUIで多機能ApexCharts
完全カスタムが必要D3.js

棒グラフ(Bar Chart)

詳細を見る →

カテゴリー別のデータ比較に最適な基本的なグラフ形式

Jan
Feb
Mar
Apr
RechartsNivoChart.jsPlotly.jsApache EChartsApexCharts

積み上げ棒グラフ(Stacked Bar Chart)

詳細を見る →

複数系列のデータを積み上げて合計と内訳を同時に把握できるグラフ形式

Q1
Q2
Q3
Q4
RechartsNivoChart.jsApexCharts

折れ線グラフ(Line Chart)

詳細を見る →

時系列データの推移や傾向を示すのに効果的

RechartsNivoChart.jsPlotly.jsApache EChartsApexCharts

エリアチャート(Area Chart)

詳細を見る →

時系列データの量や推移を塗りつぶしで視覚的に強調する表現

RechartsNivoChart.jsApexCharts

円グラフ(Pie Chart)

詳細を見る →

全体に対する各部分の割合を視覚的に表現

100%
RechartsNivoChart.jsPlotly.jsApache EChartsApexCharts

散布図(Scatter Chart)

詳細を見る →

2つの変数の相関関係やデータの分布パターンを視覚化

RechartsNivoChart.jsPlotly.jsApache EChartsApexCharts

バブルチャート(Bubble Chart)

詳細を見る →

3つの数値変数の関係をX軸・Y軸・バブルサイズで同時に可視化する散布図の拡張形式

RechartsNivoChart.jsApexCharts

ヒートマップ(Heatmap)

詳細を見る →

2次元データの密度や強度を色の濃淡で視覚的に表現

カスタム ReactNivoChart.jsPlotly.jsApache EChartsApexCharts

レーダーチャート(Radar Chart)

詳細を見る →

複数の指標を放射状に配置し、多軸データのバランスや比較を視覚化

RechartsNivoChart.jsPlotly.jsApache EChartsApexCharts

複合グラフ(Composed Chart)

詳細を見る →

棒グラフと折れ線グラフを組み合わせ、異なるスケールのデータを一画面で比較

RechartsNivoChart.jsApexCharts

ゲージ/ラジアルバーチャート(Radial Bar Chart)

詳細を見る →

進捗率やKPIを円形メーターで表示し、達成状況を直感的に可視化

82
売上
91
満足度
67
完了率
99
稼働率
RechartsNivoChart.jsApexCharts

ファンネルチャート(Funnel Chart)

詳細を見る →

コンバージョンフローの各ステージの通過率を視覚化し、離脱ポイントを把握

訪問
閲覧
カート
手続き
購入
RechartsNivoChart.js

ツリーマップ(Treemap)

詳細を見る →

階層データの構成比を面積で表示し、全体のシェアを直感的に把握

家電ファッション食品・日用品
RechartsNivoChart.jsApexCharts

カレンダーヒートマップ(Calendar Heatmap)

詳細を見る →

GitHubの草のように日別データをカレンダー形式の色の濃淡で表現

Nivoカスタム Reactreact-calendar-heatmap

ウォーターフォールチャート(Waterfall Chart)

詳細を見る →

収益・コストの増減を段階的に表示し、最終的な損益の内訳を視覚的に把握

売上高売上原価粗利益人件費広告費経費営業利益営業外純利益
RechartsNivoChart.js

ボックスプロット(Box Plot)

詳細を見る →

データの分布・中央値・四分位数・外れ値をグループ間で比較する統計グラフ

NivoD3.js カスタムChart.js カスタムApexCharts

バイオリンプロット(Violin Plot)

詳細を見る →

データの分布形状を視覚化するチャート。ボックスプロットより詳細な分布の形状(密度)を確認できる。

Plotly.jsD3.js カスタム

サンキーダイアグラム(Sankey Diagram)

詳細を見る →

フローや流れ・変遷を矢印の太さで量を表現し、データの流れを可視化

RechartsNivoD3.js

ネットワークグラフ(Network Graph)

詳細を見る →

ノード間の関係性や接続強度をフォースシミュレーションで可視化するグラフ形式

NivoD3.js カスタムreact-force-graph

パラレル座標(Parallel Coordinates)

詳細を見る →

複数の変量を持つデータを平行軸上に描画し、多次元データのパターンや相関を視覚化

馬力燃費重量加速価格
NivoD3.jsカスタムReact

人口分布マップチャート(Population Map)

詳細を見る →

地理的な位置情報と人口データをバブルマップで可視化し分布を表現

カスタム ReactNivoChart.jsRecharts

ローソク足チャート(Candlestick Chart)

詳細を見る →

株価などのOHLC(始値・高値・安値・終値)データを可視化するチャート。金融・トレード系ダッシュボードで広く使われる。

Apache EChartsPlotly.jsApexCharts

ガントチャート(Gantt Chart)

詳細を見る →

プロジェクトのタスクと期間を時系列で可視化するチャート。スケジュール管理・進捗確認に活用される。

要件定義UI設計DB設計フロントバックエンドテストリリース
Apache EChartsPlotly.jsApexCharts

ゲージチャート(Gauge Chart)

詳細を見る →

KPIや使用率などの単一指標を視覚的に表示するチャート。ダッシュボードの進捗・状態表示に広く使われる。

72%CPU使用率
Apache EChartsPlotly.jsApexChartsNivo

実装の落とし穴

  • SSR非対応: Plotly.js・ApexCharts・ECharts は SSR非対応のため next/dynamic({ ssr: false }) 必須
  • レスポンシブ: 親要素の幅をJSで取得するライブラリが多く、SSRや初期レンダリングで0幅になりがち。ResponsiveContainerResizeObserver 対応を確認する
  • アクセシビリティ: SVG ベースのライブラリ(Recharts・Nivo)は aria-label を手動付与する必要あり。スクリーンリーダー対応は別途検討
  • データ更新時の再描画コスト: 大量データではメモ化(useMemo / React.memo)を併用、Canvas 系(Chart.js)はSVG 系より高速

よくある質問

Recharts と ECharts どっちを選ぶ?

シンプルな数種類のチャートで足りるなら Recharts(React的なAPI、軽量、学習コスト低)。複雑なダッシュボードや多様なチャートが必要なら ECharts(機能豊富、JSON設定で柔軟)。両方使うプロジェクトも珍しくない。

Chart.js と SVGベースのライブラリの違いは?

Chart.js は Canvas にレンダリングするため大量データに強く、バンドルサイズも小さい。一方 Recharts/Nivo などは SVG ベースで、各要素にCSS/イベントを直接付けられる柔軟さがある。表現の細かさと性能のトレードオフ。

D3.js は必要?

ライブラリで実現できない独自表現を作る場合のみ推奨。学習コストが高く、Reactとの統合も自前で書く必要があるため、まずは Recharts や Nivo(内部で D3 を使用)で要件を満たせないか確認するのが安全。

SSR でチャートが表示されない

next/dynamic{ ssr: false } を指定する。Plotly・ApexCharts・ECharts のクライアント専用ライブラリは特に必須。Recharts は SSR 対応だが、ResponsiveContainer の初期幅が0になりやすいので注意。

おすすめライブラリ

  • • Chart.js - シンプルで使いやすいチャートライブラリ
  • • Recharts - React向けの宣言的なチャートライブラリ
  • • D3.js - 強力なデータ可視化ライブラリ
  • • Visx - Airbnb製のReact向けビジュアライゼーションライブラリ