ファンネルチャートライブラリ比較
3つの人気ライブラリでファンネルチャートを表示し、コンバージョンフローの実装方法とスタイルを比較
1. Recharts
RechartsにはFunnelChartコンポーネントが標準搭載されており、データを渡すだけで自動的にファンネル形状を描画。LabelListで各ステージの値やラベルを簡単に表示でき、アニメーションも標準対応。
'use client';
import { FunnelChart, Funnel, LabelList, Tooltip, ResponsiveContainer } from 'recharts';
const data = [
{ value: 10000, name: '訪問者', fill: '#3b82f6' },
{ value: 6000, name: '興味あり', fill: '#6366f1' },
{ value: 3000, name: '検討中', fill: '#8b5cf6' },
{ value: 1200, name: 'カート追加', fill: '#a855f7' },
{ value: 500, name: '購入完了', fill: '#d946ef' },
];
export function RechartsFunnelChart() {
return (
<ResponsiveContainer width="100%" height={300}>
<FunnelChart>
<Tooltip />
<Funnel dataKey="value" data={data} isAnimationActive>
<LabelList position="right" fill="#333" stroke="none" dataKey="name" />
</Funnel>
</FunnelChart>
</ResponsiveContainer>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Rechartsを使ったファンネルチャートを実装してください。 - 使用ライブラリ: recharts(FunnelChart・Funnel・LabelList・Tooltip・ResponsiveContainer) - サンプルデータ: ECサイトのコンバージョンファネル5段階(訪問→商品閲覧→カート追加→決済開始→購入完了)を用意すること - LabelListを使ってステージ名と数値をチャート上に表示すること - ホバー時にツールチップで各段階のユーザー数を表示すること - 親要素の幅に応じてチャートサイズが変わるよう対応すること - 各段階を異なる色(グラデーション)で表示すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
2. Nivo
@nivo/funnelパッケージでファンネルチャートをネイティブサポート。beforeSeparatorHeightやafterSeparatorHeightでステージ間の区切りをカスタマイズ可能。ホバー時のインタラクションやカスタムツールチップも充実。
'use client';
import { ResponsiveFunnel } from '@nivo/funnel';
const data = [
{ id: 'visitors', value: 10000, label: '訪問者' },
{ id: 'interested', value: 6000, label: '興味あり' },
{ id: 'considering', value: 3000, label: '検討中' },
{ id: 'cart', value: 1200, label: 'カート追加' },
{ id: 'purchased', value: 500, label: '購入完了' },
];
export function NivoFunnelChart() {
return (
<div style={{ height: 300 }}>
<ResponsiveFunnel
data={data}
margin={{ top: 20, right: 20, bottom: 20, left: 20 }}
valueFormat=">-.0f"
colors={['#3b82f6', '#6366f1', '#8b5cf6', '#a855f7', '#d946ef']}
borderWidth={20}
labelColor={{ from: 'color', modifiers: [['brighter', 3]] }}
beforeSeparatorLength={100}
beforeSeparatorOffset={20}
afterSeparatorLength={100}
afterSeparatorOffset={20}
/>
</div>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Nivoを使ったファンネルチャートを実装してください。 - 使用ライブラリ: @nivo/funnel(ResponsiveFunnel) - サンプルデータ: ECサイトのコンバージョンファネル5段階(訪問→商品閲覧→カート追加→決済開始→購入完了)を用意すること - beforeSeparatorLength・afterSeparatorLengthでステージ間の区切りをカスタマイズすること - motionConfigでアニメーションを設定すること - ホバー時にステージが拡大するインタラクションを活用すること - 親要素の幅に応じてチャートサイズが変わるよう対応すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
3. Chart.js (react-chartjs-2)
Chart.jsにはファンネルの専用チャートタイプはないが、横棒グラフ(Bar)を中央揃えにするカスタム実装でファンネル風の表現が可能。もしくはchartjs-chart-funnelプラグインを使用することでネイティブに近い実装ができる。
'use client';
import { Bar } from 'react-chartjs-2';
import {
Chart as ChartJS, CategoryScale, LinearScale,
BarElement, Title, Tooltip, Legend,
} from 'chart.js';
ChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend);
const stages = ['訪問者', '興味あり', '検討中', 'カート追加', '購入完了'];
const values = [10000, 6000, 3000, 1200, 500];
const maxValue = Math.max(...values);
const data = {
labels: stages,
datasets: [
{
label: 'パディング',
data: values.map((v) => (maxValue - v) / 2),
backgroundColor: 'transparent',
stack: 'stack',
},
{
label: 'コンバージョン数',
data: values,
backgroundColor: ['#3b82f6', '#6366f1', '#8b5cf6', '#a855f7', '#d946ef'],
stack: 'stack',
},
],
};
export function ChartJSFunnelChart() {
return (
<Bar data={data}
options={{
indexAxis: 'y',
responsive: true,
maintainAspectRatio: false,
scales: { x: { stacked: true }, y: { stacked: true } },
plugins: { legend: { display: false } },
}}
height={300} />
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Chart.jsを使ったファンネル風チャートを実装してください。 - 使用ライブラリ: chart.js(CategoryScale・LinearScale・BarElement・Tooltip・Legend)、react-chartjs-2(Bar) - サンプルデータ: ECサイトのコンバージョンファネル5段階(訪問→商品閲覧→カート追加→決済開始→購入完了)を用意すること - 横棒グラフ(indexAxis: "y")を積み上げ表示し、左側を透明にして中央揃えのファンネル風表現を実現すること - ホバー時にツールチップで各段階のユーザー数を表示すること(透明バーは非表示) - 各段階を異なる色で表示すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
ライブラリ比較
| ライブラリ | レンダリング | ファンネル対応 | インタラクション | おすすめ用途 |
|---|---|---|---|---|
| Recharts | SVG | ◎ 標準搭載 | ◯ | Reactアプリ全般 |
| Nivo | SVG | ◎ 専用パッケージ | ◎ | デザイン重視のダッシュボード |
| Chart.js | Canvas | △ プラグイン or カスタム | ◯ | 既存Chart.jsプロジェクト |
選択のポイント
- •Recharts: FunnelChartが標準搭載されており追加パッケージ不要。Reactプロジェクトで最も手軽に導入できる。
- •Nivo: @nivo/funnelで洗練されたデザインのファンネルを実現。ステージ間のアニメーションやインタラクションが豊富でプレゼンテーション向け。
- •Chart.js: 専用サポートはないが、既にChart.jsを使用しているプロジェクトではプラグインを追加するだけで対応可能。
典型的な使用例
- 🛒ECサイトのコンバージョン分析:訪問〜購入完了までの各ステージの離脱率を可視化
- 📧メールマーケティング:配信〜開封〜クリック〜コンバージョンの到達率を追跡
- 👥採用フロー:応募〜書類選考〜面接〜内定〜入社までの歩留まりを管理
- 🎯セールスパイプライン:リード獲得〜商談〜提案〜受注までの営業プロセスを可視化
⚠️ 使用時の注意点
- •ステージ数は4〜6個程度が視認性のバランスが良い
- •各ステージの離脱率(前ステージからの減少率)も合わせて表示すると分析に役立つ
- •面積ではなく幅でデータを表現しているため、値の差が視覚的に誇張される場合がある
- •ステージ間の順序は必ず上から下(または左から右)に流れるように設計する
ファネルチャート(漏斗グラフ)は、プロセスの各ステップにおける数値の減少を視覚化するグラフ。上から下にかけて数値が絞り込まれる形を表現する。
ECサイトの購買フロー・セールスパイプライン・ユーザー登録ステップなど、コンバージョン率の分析に使われる。
- •標準型(上広がり)
- •ピラミッド型(下広がり)
- •パーセンテージ表示型
- •コンパクト型
- •インタラクティブ型(ホバー詳細)
📊 使用しているサンプルデータ(クリックで表示)
ECサイトのコンバージョンファネル(訪問〜購入完了までの5段階)のデータを使用しています。
関連する逆引きリファレンス
- → 色・スタイルのカスタマイズ(borderColor・fillOpacity など)
- → ツールチップのカスタマイズ(カスタムHTML・フォーマッタ)
- → 軸(Axis)の設定(ラベルフォーマット・対数スケール・複数軸)
- → レスポンシブ対応(コンテナ追従・アスペクト比・リサイズ)
- → アニメーション・トランジション(初期描画・データ更新・イージング)
- → 凡例(Legend)の配置・スタイル(位置・アイコン・系列トグル)
- → データラベルの表示(値・位置・フォーマッタ)
- → クリックイベント・インタラクション(クリック・ホバー・ブラシ選択)
- → グリッド線のカスタマイズ(表示制御・線スタイル・リファレンスライン)