円グラフライブラリ比較

6つの人気ライブラリで割合データを表示し、パイチャートとドーナツチャートを比較

1. Recharts

シンプルな実装で美しい円グラフを作成。アニメーション付きで視覚的に魅力的。

✓ パイ・ドーナツ両対応✓ ラベル自動配置✓ アニメーション
特徴: innerRadiusを設定することでドーナツチャートに変換可能。 ラベルのカスタマイズも柔軟で、パーセンテージ表示が簡単。
tsx
'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

洗練されたデザインと豊富なアニメーションオプション

✓ 美しいデフォルト✓ インタラクティブ✓ アクセシブル
特徴: cornerRadiusで角を丸くしたり、activeOuterRadiusOffsetで ホバー時の拡大効果を設定可能。視覚的に非常に洗練されたデザイン。
tsx
'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 - パイチャート

シンプルな円グラフ。軽量で高速な描画が特徴。

✓ 軽量✓ Canvas描画✓ シンプル
特徴: 基本的な円グラフ。中心が塗りつぶされた伝統的なパイチャート形式。 設定がシンプルで導入が容易。
tsx
'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 - ドーナツチャート

中央が空いたドーナツ形式。中央にテキストや数値を配置可能。

✓ 中央スペース活用✓ モダンな見た目✓ 高速
特徴: パイチャートとほぼ同じ実装で、コンポーネントを変えるだけでドーナツ形式に。 中央のスペースに合計値などを表示するのが一般的。
tsx
'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が必要。
tsx
'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で内径・外径を指定してドーナツグラフを実装。凡例の配置も柔軟にカスタマイズ可能。

✓ 高カスタマイズ性✓ ドーナツ対応✓ JSONベース設定

チャートを読み込み中...

特徴: radius: ['40%', '70%'] でドーナツグラフを表現。 SSRには非対応のためdynamic importが必要。
tsx
'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' 指定だけで美しいドーナツチャートを描画。データラベルとアニメーションを標準装備

✓ アニメーション✓ データラベル内蔵✓ ドーナツ対応

チャートを読み込み中...

特徴:type: 'donut' を指定するだけでドーナツチャートになる。 データラベル・凡例・アニメーションが標準装備で、設定は JSON ベースで直感的。
tsx
'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%として各部分の構成比を伝えたい場面で使われる。

主なバリエーション
  • パイチャート型(扇形)
  • ドーナツ型(リング状)
  • ラベル付き型
  • インタラクティブ型(クリックで展開)
  • 半円型(セミサークル)

🥧 使用しているサンプルデータ(クリックで表示)

製品カテゴリー別の売上シェア(%)のデータを使用しています。

関連する逆引きリファレンス