円グラフライブラリ比較
6つの人気ライブラリで割合データを表示し、パイチャートとドーナツチャートを比較
1. Recharts
シンプルな実装で美しい円グラフを作成。アニメーション付きで視覚的に魅力的。
'use client';
import { PieChart, Pie, Cell, Tooltip, Legend, ResponsiveContainer } from 'recharts';
const data = [
{ name: '製品A', value: 4200 },
{ name: '製品B', value: 3800 },
{ name: '製品C', value: 2100 },
{ name: '製品D', value: 1500 },
];
const COLORS = ['#3b82f6', '#10b981', '#8b5cf6', '#f97316'];
export function RechartsPieChart() {
return (
<ResponsiveContainer width="100%" height={300}>
<PieChart>
<Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%"
outerRadius={100} innerRadius={50} label>
{data.map((_, i) => <Cell key={i} fill={COLORS[i % COLORS.length]} />)}
</Pie>
<Tooltip />
<Legend />
</PieChart>
</ResponsiveContainer>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Rechartsを使った円グラフ(ドーナツチャート)を実装してください。 - 使用ライブラリ: recharts(PieChart・Pie・Cell・Tooltip・Legend・ResponsiveContainer) - サンプルデータ: 製品カテゴリー別売上シェア5種のデータを用意すること - innerRadiusを設定してドーナツチャート形式にすること - ホバー時にツールチップでカテゴリー名・値・割合を表示すること - 各セクションにラベルとパーセンテージを表示すること - 親要素の幅に応じてチャートサイズが変わるよう対応すること - チャート初期表示時に展開アニメーションを追加すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
2. Nivo
洗練されたデザインと豊富なアニメーションオプション
'use client';
import { ResponsivePie } from '@nivo/pie';
const data = [
{ id: '製品A', value: 4200, color: '#3b82f6' },
{ id: '製品B', value: 3800, color: '#10b981' },
{ id: '製品C', value: 2100, color: '#8b5cf6' },
{ id: '製品D', value: 1500, color: '#f97316' },
];
export function NivoPieChart() {
return (
<div style={{ height: 300 }}>
<ResponsivePie
data={data}
margin={{ top: 40, right: 80, bottom: 80, left: 80 }}
innerRadius={0.6}
padAngle={0.7}
cornerRadius={3}
activeOuterRadiusOffset={8}
colors={{ datum: 'data.color' }}
arcLinkLabelsSkipAngle={10}
arcLinkLabelsThickness={2}
arcLabelsSkipAngle={10}
/>
</div>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Nivoを使った円グラフ(ドーナツチャート)を実装してください。 - 使用ライブラリ: @nivo/pie(ResponsivePie) - サンプルデータ: 製品カテゴリー別売上シェア5種のデータを用意すること - innerRadiusでドーナツ形式にし、cornerRadiusで角を丸くすること - activeOuterRadiusOffsetでホバー時の拡大効果を設定すること - arcLinkLabelsでラベルを表示し、arcLabelsでセクション内にパーセンテージを表示すること - 親要素の幅に応じてチャートサイズが変わるよう対応すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
3a. Chart.js - パイチャート
シンプルな円グラフ。軽量で高速な描画が特徴。
'use client';
import { Pie } from 'react-chartjs-2';
import { Chart as ChartJS, ArcElement, Tooltip, Legend } from 'chart.js';
ChartJS.register(ArcElement, Tooltip, Legend);
const data = {
labels: ['製品A', '製品B', '製品C', '製品D'],
datasets: [{
data: [4200, 3800, 2100, 1500],
backgroundColor: [
'rgba(59,130,246,0.8)', 'rgba(16,185,129,0.8)',
'rgba(139,92,246,0.8)', 'rgba(249,115,22,0.8)',
],
borderColor: ['#3b82f6', '#10b981', '#8b5cf6', '#f97316'],
borderWidth: 2,
}],
};
export function ChartJSPieChart() {
return <Pie data={data} options={{ responsive: true, maintainAspectRatio: false }} height={300} />;
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Chart.jsを使ったパイチャート(円グラフ)を実装してください。 - 使用ライブラリ: chart.js(ArcElement・Tooltip・Legend)、react-chartjs-2(Pie) - サンプルデータ: 製品カテゴリー別売上シェア5種のデータを用意すること - 中心が塗りつぶされた伝統的なパイチャート形式で実装すること - ホバー時にツールチップでカテゴリー名と値を表示すること - 凡例を右側に表示すること - 親要素の幅に応じてレスポンシブ対応すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
3b. Chart.js - ドーナツチャート
中央が空いたドーナツ形式。中央にテキストや数値を配置可能。
'use client';
import { Doughnut } from 'react-chartjs-2';
import { Chart as ChartJS, ArcElement, Tooltip, Legend } from 'chart.js';
ChartJS.register(ArcElement, Tooltip, Legend);
const data = {
labels: ['製品A', '製品B', '製品C', '製品D'],
datasets: [{
data: [4200, 3800, 2100, 1500],
backgroundColor: [
'rgba(59,130,246,0.8)', 'rgba(16,185,129,0.8)',
'rgba(139,92,246,0.8)', 'rgba(249,115,22,0.8)',
],
borderColor: ['#3b82f6', '#10b981', '#8b5cf6', '#f97316'],
borderWidth: 2,
}],
};
export function ChartJSDoughnutChart() {
return (
<Doughnut data={data}
options={{ responsive: true, maintainAspectRatio: false, cutout: '60%' }}
height={300} />
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Chart.jsを使ったドーナツチャートを実装してください。 - 使用ライブラリ: chart.js(ArcElement・Tooltip・Legend)、react-chartjs-2(Doughnut) - サンプルデータ: 製品カテゴリー別売上シェア5種のデータを用意すること - 中央が空いたドーナツ形式で実装すること - ホバー時にツールチップでカテゴリー名と値を表示すること - 凡例を右側に表示すること - 親要素の幅に応じてレスポンシブ対応すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
4. Plotly.js (react-plotly.js)
holeプロパティ1つでドーナツグラフに変換可能。ホバーで各セクションの詳細情報を表示。
チャートを読み込み中...
hole プロパティでドーナツグラフに変換可能。 SSRには非対応のためdynamic importが必要。'use client';
import dynamic from 'next/dynamic';
const Plot = dynamic(() => import('react-plotly.js'), { ssr: false });
export function PlotlyPieChart() {
return (
<Plot
data={[{
type: 'pie',
labels: ['React', 'Vue', 'Angular', 'Svelte', 'その他'],
values: [45, 25, 15, 10, 5],
hole: 0.4,
}]}
layout={{
title: { text: 'フレームワーク使用率' },
height: 300,
margin: { t: 40, b: 20, l: 20, r: 20 },
}}
style={{ width: '100%' }}
config={{ responsive: true }}
/>
);
}5. Apache ECharts (echarts-for-react)
radiusで内径・外径を指定してドーナツグラフを実装。凡例の配置も柔軟にカスタマイズ可能。
チャートを読み込み中...
radius: ['40%', '70%'] でドーナツグラフを表現。 SSRには非対応のためdynamic importが必要。'use client';
import dynamic from 'next/dynamic';
const ReactECharts = dynamic(() => import('echarts-for-react'), { ssr: false });
export function EChartsPieChart() {
const option = {
tooltip: { trigger: 'item' },
legend: { orient: 'vertical', left: 'left' },
series: [{
type: 'pie',
radius: ['40%', '70%'],
data: [
{ value: 35, name: '製品A' },
{ value: 25, name: '製品B' },
{ value: 20, name: '製品C' },
{ value: 12, name: '製品D' },
{ value: 8, name: 'その他' },
],
}],
};
return <ReactECharts option={option} style={{ height: 300 }} />;
}6. ApexCharts (react-apexcharts)
type: 'donut' 指定だけで美しいドーナツチャートを描画。データラベルとアニメーションを標準装備
チャートを読み込み中...
'use client';
import dynamic from 'next/dynamic';
const Chart = dynamic(() => import('react-apexcharts'), { ssr: false });
export function ApexPieChart() {
const options = {
chart: { type: 'donut' as const },
labels: ['製品A', '製品B', '製品C', '製品D'],
colors: ['#3b82f6', '#10b981', '#8b5cf6', '#f97316'],
dataLabels: { enabled: true },
legend: { position: 'bottom' as const },
plotOptions: { pie: { donut: { size: '60%' } } },
tooltip: { y: { formatter: (val: number) => val.toLocaleString() } },
};
const series = [4200, 3800, 2100, 1500];
return <Chart type="donut" options={options} series={series} height={300} width="100%" />;
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、ApexCharts(react-apexcharts)を使ったドーナツチャートを実装してください。 - 使用ライブラリ: react-apexcharts(dynamic importでSSR無効化) - chart.type: 'donut' でドーナツ形式にすること - サンプルデータ: 製品カテゴリー別売上シェア4種(製品A〜D)を用意すること - legend.position: 'bottom' で凡例を下部に配置すること - plotOptions.pie.donut.size で中央の穴のサイズを調整すること - tooltip.y.formatter で数値フォーマットを設定すること
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
ライブラリ比較
| ライブラリ | ドーナツ対応 | ラベル配置 | アニメーション | おすすめ用途 |
|---|---|---|---|---|
| Recharts | ◎ | 自動・柔軟 | ◎ | ダッシュボード |
| Nivo | ◎ | 高度 | ◎ | デザイン重視 |
| Chart.js | ◎(別コンポーネント) | 標準 | ◯ | シンプルな用途 |
| Plotly.js | ◎(hole プロパティ) | 標準・詳細表示 | ◯ | 科学系・統計系 |
| Apache ECharts | ◎(radius 配列) | 高度 | ◎ | エンタープライズダッシュボード |
| ApexCharts | ◎(type: donut) | 標準・詳細表示 | ◎ | ダッシュボード・業務アプリ |
パイチャート vs ドーナツチャート
🥧 パイチャート(円グラフ)
- ✓伝統的で馴染みやすい
- ✓小さいスペースでも視認性が良い
- ✓全体に対する割合が直感的
🍩 ドーナツチャート
- ✓モダンで洗練された見た目
- ✓中央に合計値や重要な情報を配置可能
- ✓複数のドーナツを重ねて表現可能
円グラフの選択ポイント
- •Recharts: Reactアプリで標準的な円グラフが必要な場合。 パイとドーナツの切り替えが簡単で、実装コストが低い。
- •Nivo: デザイン性が重要で、美しいアニメーションや インタラクションが必要な場合。プレゼンテーション向け。
- •Chart.js: シンプルな実装で軽量な円グラフが欲しい場合。 パイとドーナツは別コンポーネントとして用意されている。
- •Plotly.js: ズーム・パン・ホバーなどのインタラクティブ機能が標準装備。
holeプロパティ1つでドーナツグラフに変換でき、科学系・統計系グラフに強い。 - •Apache ECharts: カスタマイズ性が非常に高く、ダッシュボード構築に適している。
radius配列でドーナツグラフを柔軟に表現できる。 - •ApexCharts:type: 'donut' 指定だけで美しいドーナツチャートを描画。 データラベル・アニメーション・インタラクションが標準装備で設定コストが低い。
⚠️ 円グラフ使用時の注意点
- •カテゴリーは5〜7個程度に抑える(多すぎると見づらい)
- •小さい割合は「その他」にまとめることを検討
- •正確な比較が必要な場合は棒グラフの方が適している
- •時系列データには折れ線グラフを使用する
円グラフ(パイチャート)は、全体に対する各カテゴリの割合を扇形の面積で表現するグラフ。ドーナツチャート(リングチャート)もこの系統。
市場シェア・支出内訳・アンケート回答比率など、全体を100%として各部分の構成比を伝えたい場面で使われる。
- •パイチャート型(扇形)
- •ドーナツ型(リング状)
- •ラベル付き型
- •インタラクティブ型(クリックで展開)
- •半円型(セミサークル)
🥧 使用しているサンプルデータ(クリックで表示)
製品カテゴリー別の売上シェア(%)のデータを使用しています。
関連する逆引きリファレンス
- → 色・スタイルのカスタマイズ(borderColor・fillOpacity など)
- → ツールチップのカスタマイズ(カスタムHTML・フォーマッタ)
- → 軸(Axis)の設定(ラベルフォーマット・対数スケール・複数軸)
- → レスポンシブ対応(コンテナ追従・アスペクト比・リサイズ)
- → アニメーション・トランジション(初期描画・データ更新・イージング)
- → 凡例(Legend)の配置・スタイル(位置・アイコン・系列トグル)
- → データラベルの表示(値・位置・フォーマッタ)
- → クリックイベント・インタラクション(クリック・ホバー・ブラシ選択)
- → グリッド線のカスタマイズ(表示制御・線スタイル・リファレンスライン)