散布図ライブラリ比較
6つの人気ライブラリで散布図を表示し、データの相関関係の表現方法を比較
1. Recharts
ScatterChartコンポーネントで直感的に散布図を描画。ZAxisによるバブルチャート拡張も可能
'use client';
import { ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';
const data = [
{ x: 10, y: 30 }, { x: 40, y: 100 }, { x: 60, y: 50 },
{ x: 80, y: 120 }, { x: 100, y: 80 }, { x: 120, y: 150 },
];
export function RechartsScatterChart() {
return (
<ResponsiveContainer width="100%" height={300}>
<ScatterChart>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="x" name="X" />
<YAxis dataKey="y" name="Y" />
<Tooltip cursor={{ strokeDasharray: '3 3' }} />
<Scatter data={data} fill="#3b82f6" />
</ScatterChart>
</ResponsiveContainer>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Rechartsを使った散布図を実装してください。 - 使用ライブラリ: recharts(ScatterChart、Scatter、XAxis、YAxis、ZAxis、CartesianGrid、Tooltip、Legend、ResponsiveContainer) - サンプルデータ: 2製品の広告費と売上の関係(各10件)を用意すること - インタラクティブ: ホバー時にツールチップでX・Y軸の正確な値(単位付き)を表示すること - グループ区別: Scatterコンポーネントを複数配置し、fillカラーで製品ごとに色分けして表示すること - レスポンシブ: ResponsiveContainerで親要素の幅に応じてチャートサイズが変わるよう対応すること - 拡張: ZAxisを使えばデータポイントのサイズを第3変数で制御してバブルチャートに拡張できることをコメントで示すこと
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
2. Nivo
ResponsiveScatterPlotで美しいデザインのインタラクティブな散布図を描画
'use client';
import { ResponsiveScatterPlot } from '@nivo/scatterplot';
const data = [
{
id: 'グループA',
data: [
{ x: 10, y: 30 }, { x: 40, y: 100 }, { x: 60, y: 50 },
{ x: 80, y: 120 }, { x: 100, y: 80 },
],
},
];
export function NivoScatterChart() {
return (
<div style={{ height: 300 }}>
<ResponsiveScatterPlot
data={data}
margin={{ top: 20, right: 20, bottom: 50, left: 60 }}
xScale={{ type: 'linear', min: 0, max: 120 }}
yScale={{ type: 'linear', min: 0, max: 160 }}
colors={['#3b82f6']}
nodeSize={10}
useMesh={true}
/>
</div>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Nivoを使った散布図を実装してください。
- 使用ライブラリ: @nivo/scatterplot(ResponsiveScatterPlot)
- サンプルデータ: 2製品の広告費と売上の関係(各10件)をNivo形式({id, data: [{x, y}]})で用意すること
- インタラクティブ: ホバー時にツールチップでX・Y軸の正確な値を表示すること(useMesh: true)
- グループ区別: colorsプロパティで製品ごとに色分けし、凡例を表示すること
- レスポンシブ: ResponsiveScatterPlotで親要素の幅に応じてチャートサイズが変わるよう対応すること
- 軸ラベル: axisBottomとaxisLeftのlegendプロパティで軸のラベル(広告費・売上)を表示すること⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
3. Chart.js (react-chartjs-2)
Canvas描画による高パフォーマンスな散布図。大量のデータポイントもスムーズに表示
'use client';
import { Scatter } from 'react-chartjs-2';
import { Chart as ChartJS, LinearScale, PointElement, Tooltip, Legend } from 'chart.js';
ChartJS.register(LinearScale, PointElement, Tooltip, Legend);
const data = {
datasets: [
{
label: 'グループA',
data: [
{ x: 10, y: 30 }, { x: 40, y: 100 }, { x: 60, y: 50 },
{ x: 80, y: 120 }, { x: 100, y: 80 }, { x: 120, y: 150 },
],
backgroundColor: 'rgba(59, 130, 246, 0.7)',
},
],
};
export function ChartJSScatterChart() {
return <Scatter data={data} options={{ responsive: true, maintainAspectRatio: false }} height={300} />;
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Chart.js(react-chartjs-2)を使った散布図を実装してください。
- 使用ライブラリ: react-chartjs-2(Scatter)、chart.js(LinearScale、PointElement、Title、Tooltip、Legend)
- サンプルデータ: 2製品の広告費と売上の関係(各10件)を{x, y}形式で用意すること
- インタラクティブ: ホバー時にツールチップでX・Y軸の正確な値を表示すること
- グループ区別: datasetsを製品ごとに分けてbackgroundColorとborderColorで色分けして表示すること
- レスポンシブ: responsive: true、maintainAspectRatio: falseで親要素に合わせてサイズを調整すること
- 軸ラベル: scalesのx・yそれぞれにtitle.display: trueと軸名(広告費・売上)を設定すること⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
4. Plotly.js (react-plotly.js)
ズーム・パン・ホバーが標準装備。散布図での相関分析や科学データの可視化に最適。
チャートを読み込み中...
'use client';
import dynamic from 'next/dynamic';
const Plot = dynamic(() => import('react-plotly.js'), { ssr: false });
export function PlotlyScatterChart() {
return (
<Plot
data={[
{
type: 'scatter',
mode: 'markers',
x: [120, 200, 150, 280, 320, 180, 250, 350, 100, 220],
y: [340, 480, 390, 620, 710, 420, 560, 780, 290, 510],
name: '製品A',
marker: { color: '#6366f1', size: 10 },
},
{
type: 'scatter',
mode: 'markers',
x: [100, 180, 140, 260, 300, 160, 230, 340, 110, 200],
y: [210, 350, 280, 440, 520, 310, 400, 580, 230, 370],
name: '製品B',
marker: { color: '#f59e0b', size: 10 },
},
]}
layout={{ title: { text: '散布図' }, height: 300, margin: { t: 40, b: 40, l: 60, r: 20 } }}
style={{ width: '100%' }}
config={{ responsive: true }}
/>
);
}5. Apache ECharts (echarts-for-react)
JSONベースの設定で直感的に散布図を実装。軸ラベルや凡例のカスタマイズが豊富。
チャートを読み込み中...
'use client';
import dynamic from 'next/dynamic';
const ReactECharts = dynamic(() => import('echarts-for-react'), { ssr: false });
export function EChartsScatterChart() {
const option = {
tooltip: { trigger: 'item' },
legend: { data: ['製品A', '製品B'], top: 'top' },
xAxis: { type: 'value', name: '広告費(万円)' },
yAxis: { type: 'value', name: '売上(万円)' },
series: [
{
name: '製品A',
type: 'scatter',
data: [[120,340],[200,480],[150,390],[280,620],[320,710],[180,420],[250,560],[350,780],[100,290],[220,510]],
},
{
name: '製品B',
type: 'scatter',
data: [[100,210],[180,350],[140,280],[260,440],[300,520],[160,310],[230,400],[340,580],[110,230],[200,370]],
},
],
};
return <ReactECharts option={option} style={{ height: 300 }} />;
}6. ApexCharts (react-apexcharts)
ズーム・パン機能を標準装備した散布図。複数系列の色分けと tooltip が直感的に設定可能
チャートを読み込み中...
'use client';
import dynamic from 'next/dynamic';
const Chart = dynamic(() => import('react-apexcharts'), { ssr: false });
export function ApexScatterChart() {
const options = {
chart: { type: 'scatter' as const, toolbar: { show: false }, zoom: { enabled: true } },
xaxis: { tickAmount: 6, labels: { formatter: (val: string) => parseFloat(val).toFixed(0) } },
yaxis: { tickAmount: 5 },
colors: ['#3b82f6', '#10b981'],
dataLabels: { enabled: false },
tooltip: { x: { show: true } },
};
const series = [
{ name: 'グループA', data: [[10, 30], [40, 100], [60, 50], [80, 120], [100, 80], [120, 150]] },
{ name: 'グループB', data: [[20, 60], [50, 90], [70, 40], [90, 110], [110, 70], [130, 130]] },
];
return <Chart type="scatter" options={options} series={series} height={300} width="100%" />;
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、ApexCharts(react-apexcharts)を使った散布図を実装してください。
- 使用ライブラリ: react-apexcharts(dynamic importでSSR無効化)
- chart.type: 'scatter' を指定し、chart.toolbar: { show: false } でツールバーを非表示にすること
- サンプルデータ: グループA・Bの [x, y] 配列形式で各6件のデータを用意すること
- chart.zoom: { enabled: true } でズーム機能を有効にすること
- colors で各グループの色を指定すること
- dataLabels: { enabled: false } でデータラベルを非表示にすること⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
ライブラリ比較
| ライブラリ | バブル拡張 | インタラクション | 大量データ | おすすめ用途 |
|---|---|---|---|---|
| Recharts | ◎(ZAxis) | ◯ | △ | ダッシュボード |
| Nivo | ◯(nodeSize) | ◎ | △ | 分析レポート |
| Chart.js | ◯(pointRadius) | ◯ | ◎ | 大量データの可視化 |
| Plotly.js | ◎(marker.size) | ◎ | ◯ | 科学データ・統計分析 |
| Apache ECharts | ◎(symbolSize) | ◎ | ◯ | エンタープライズダッシュボード |
| ApexCharts | ◯(bubble typeへ切替) | ◎(ズーム・パン) | ◯ | ダッシュボード・業務アプリ |
散布図の選択ポイント
- •Recharts: ZAxisを活用したバブルチャートへの拡張が容易。 Reactプロジェクトでのダッシュボード構築に最適。
- •Nivo: 美しいデフォルトデザインとメッシュベースのインタラクションが魅力。 分析レポートやプレゼンテーション向け。
- •Chart.js: Canvas描画で数千ポイントでも高パフォーマンス。 大量のデータポイントを扱う科学データやログ分析に最適。
- •Plotly.js: ズーム・パン・ホバーなどのインタラクティブ機能が標準装備。科学系・統計系グラフに特に強く、3Dグラフへの拡張も可能。
- •Apache ECharts: カスタマイズ性が非常に高く、ダッシュボード構築に適している。JSONベースのオプション設定で複雑な設定も直感的に記述できる。
- •ApexCharts:ズーム・パン機能が標準装備。[x, y] 配列形式でデータを記述でき、 type を 'bubble' に変更するだけでバブルチャートへ拡張できる。
散布図の典型的な使用例
📊 相関分析
広告費と売上、学習時間とテスト結果など2つの変数の関係を視覚化
🔬 科学データ
実験データのプロットや測定値の分布パターンの確認
👥 クラスタリング
顧客セグメントやデータのグループ分けを視覚的に表現
📈 外れ値検出
データの異常値やパターンから外れたポイントを発見
⚠️ 散布図使用時の注意点
- •データポイントが重なる場合は透明度を調整して視認性を確保する
- •相関関係があっても因果関係があるとは限らないことに注意
- •軸のスケールによって印象が大きく変わるため適切な範囲を設定する
- •系列が多すぎると識別が困難になるため色の使い分けを工夫する
散布図(スキャッターチャート)は、2変数の相関関係をX軸・Y軸の座標点で表現するグラフ。データの分布やクラスタリングを把握できる。
身長と体重の相関・広告費と売上の関係・機械学習の予測と実績の比較など、2変数間の相関や外れ値を探索する場面で使われる。
- •基本型(単一系列)
- •複数系列型(色分け)
- •バブルスキャッター型(サイズ変動)
- •回帰線付き型
- •インタラクティブ型(クリック詳細)
📊 使用しているサンプルデータ(クリックで表示)
2つの製品の広告費と売上の関係を示すデータ(各10件)を使用しています。
関連する逆引きリファレンス
- → 色・スタイルのカスタマイズ(borderColor・fillOpacity など)
- → ツールチップのカスタマイズ(カスタムHTML・フォーマッタ)
- → 軸(Axis)の設定(ラベルフォーマット・対数スケール・複数軸)
- → レスポンシブ対応(コンテナ追従・アスペクト比・リサイズ)
- → アニメーション・トランジション(初期描画・データ更新・イージング)
- → 凡例(Legend)の配置・スタイル(位置・アイコン・系列トグル)
- → データラベルの表示(値・位置・フォーマッタ)
- → クリックイベント・インタラクション(クリック・ホバー・ブラシ選択)
- → グリッド線のカスタマイズ(表示制御・線スタイル・リファレンスライン)