レーダーチャートライブラリ比較

6つの人気ライブラリで多軸データを視覚化し、レーダーチャートの実装を比較

1. Recharts

宣言的なAPIで直感的にレーダーチャートを構築。複数データの重ね合わせが簡単。

✓ 宣言的API✓ 複数データ対応✓ アニメーション
特徴: Radarコンポーネントを追加するだけで複数データを重ねて表示可能。 PolarGridやPolarAngleAxisで軸の表示を細かく制御できる。
tsx
'use client';
import {
  RadarChart, Radar, PolarGrid, PolarAngleAxis, PolarRadiusAxis,
  Legend, ResponsiveContainer,
} from 'recharts';

const data = [
  { subject: 'デザイン', A: 120, B: 110 },
  { subject: 'パフォーマンス', A: 98, B: 130 },
  { subject: 'ドキュメント', A: 86, B: 130 },
  { subject: 'コミュニティ', A: 99, B: 100 },
  { subject: '学習コスト', A: 85, B: 90 },
];

export function RechartsRadarChart() {
  return (
    <ResponsiveContainer width="100%" height={300}>
      <RadarChart data={data}>
        <PolarGrid />
        <PolarAngleAxis dataKey="subject" />
        <PolarRadiusAxis angle={30} domain={[0, 150]} />
        <Radar name="ライブラリA" dataKey="A" stroke="#3b82f6" fill="#3b82f6" fillOpacity={0.4} />
        <Radar name="ライブラリB" dataKey="B" stroke="#10b981" fill="#10b981" fillOpacity={0.4} />
        <Legend />
      </RadarChart>
    </ResponsiveContainer>
  );
}

🤖 AIプロンプトテンプレート

React + Tailwind CSSで、Rechartsを使ったレーダーチャートを実装してください。

- 使用ライブラリ: recharts(RadarChart、Radar、PolarGrid、PolarAngleAxis、PolarRadiusAxis、Legend、Tooltip、ResponsiveContainer)
- サンプルデータ: 2プレイヤーのスキル評価6軸(攻撃力・防御力・スピード・スタミナ・テクニック・メンタル)を用意すること
- インタラクティブ: ホバー時にツールチップで各軸の値を表示すること
- 凡例: 複数のデータ系列の凡例を表示すること
- レスポンシブ: ResponsiveContainerで親要素の幅に応じてチャートサイズが変わるよう対応すること
- スタイリング: fillOpacityで各系列を半透明の塗りつぶしにし、複数Radarコンポーネントを重ねて比較できるようにすること

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

2. Nivo

美しいデフォルトスタイルとインタラクティブな操作が魅力のレーダーチャート

✓ 美しいデフォルト✓ ドット表示✓ テーマ対応
特徴: gridShapeで円形・多角形を切り替え可能。 dotの表示やblendModeで重なり部分の表現を制御できる洗練されたデザイン。
tsx
'use client';
import { ResponsiveRadar } from '@nivo/radar';

const data = [
  { subject: 'デザイン', A: 120, B: 110 },
  { subject: 'パフォーマンス', A: 98, B: 130 },
  { subject: 'ドキュメント', A: 86, B: 130 },
  { subject: 'コミュニティ', A: 99, B: 100 },
  { subject: '学習コスト', A: 85, B: 90 },
];

export function NivoRadarChart() {
  return (
    <div style={{ height: 300 }}>
      <ResponsiveRadar
        data={data}
        keys={['A', 'B']}
        indexBy="subject"
        maxValue={150}
        margin={{ top: 40, right: 60, bottom: 40, left: 60 }}
        colors={['#3b82f6', '#10b981']}
        fillOpacity={0.4}
        legends={[{ anchor: 'top-left', direction: 'column', itemWidth: 80, itemHeight: 20 }]}
      />
    </div>
  );
}

🤖 AIプロンプトテンプレート

React + Tailwind CSSで、Nivoを使ったレーダーチャートを実装してください。

- 使用ライブラリ: @nivo/radar(ResponsiveRadar)
- サンプルデータ: 2プレイヤーのスキル評価6軸(攻撃力・防御力・スピード・スタミナ・テクニック・メンタル)をNivo形式(keysとindexByを使ったオブジェクト配列)で用意すること
- インタラクティブ: ホバー時にツールチップで各軸の値を表示すること
- 凡例: 複数のデータ系列の凡例を表示すること
- レスポンシブ: ResponsiveRadarで親要素の幅に応じてチャートサイズが変わるよう対応すること
- スタイリング: gridShapeで円形・多角形を切り替え、fillOpacityとblendModeで重なり部分の表現を制御し、dotSize・dotBorderWidthでデータポイントのドットを表示すること

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

3. Chart.js

軽量で高速なCanvas描画。シンプルな設定でレーダーチャートを表示。

✓ 軽量✓ Canvas描画✓ スケール制御
特徴: RadialLinearScaleで目盛りの範囲やステップを制御。 Fillerプラグインで塗りつぶし表示を有効化。Canvas描画のため大量データでも高速。
tsx
'use client';
import { Radar } from 'react-chartjs-2';
import {
  Chart as ChartJS, RadialLinearScale, PointElement,
  LineElement, Filler, Tooltip, Legend,
} from 'chart.js';

ChartJS.register(RadialLinearScale, PointElement, LineElement, Filler, Tooltip, Legend);

const data = {
  labels: ['デザイン', 'パフォーマンス', 'ドキュメント', 'コミュニティ', '学習コスト'],
  datasets: [
    {
      label: 'ライブラリA',
      data: [120, 98, 86, 99, 85],
      backgroundColor: 'rgba(59, 130, 246, 0.3)',
      borderColor: '#3b82f6',
    },
    {
      label: 'ライブラリB',
      data: [110, 130, 130, 100, 90],
      backgroundColor: 'rgba(16, 185, 129, 0.3)',
      borderColor: '#10b981',
    },
  ],
};

export function ChartJSRadarChart() {
  return <Radar data={data} options={{ responsive: true, maintainAspectRatio: false }} height={300} />;
}

🤖 AIプロンプトテンプレート

React + Tailwind CSSで、Chart.js(react-chartjs-2)を使ったレーダーチャートを実装してください。

- 使用ライブラリ: react-chartjs-2(Radar)、chart.js(RadialLinearScale、PointElement、LineElement、Filler、Tooltip、Legend)
- サンプルデータ: 2プレイヤーのスキル評価6軸(攻撃力・防御力・スピード・スタミナ・テクニック・メンタル)を用意すること
- インタラクティブ: ホバー時にツールチップで各軸の値を表示すること
- 凡例: 複数のデータ系列の凡例を表示すること
- レスポンシブ: responsive: true、maintainAspectRatio: falseで親要素に合わせてサイズを調整すること
- スタイリング: datasetsのbackgroundColorにRGBAで透明度を設定して塗りつぶし表示し、scales.rのbeginAtZero・max・stepSizeで目盛りの範囲を制御すること

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

4. Plotly.js (react-plotly.js)

scatterpolar typeを使って極座標グラフを実装。fill: 'toself' で塗りつぶし表示が可能。

✓ ズーム・パン標準✓ インタラクティブ✓ 複数系列対応

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

特徴: fill: 'toself' で塗りつぶし表示。 SSRには非対応のためdynamic importが必要。
tsx
'use client';
import dynamic from 'next/dynamic';
const Plot = dynamic(() => import('react-plotly.js'), { ssr: false });

export function PlotlyRadarChart() {
  return (
    <Plot
      data={[{
        type: 'scatterpolar',
        r: [85, 70, 90, 60, 75, 80],
        theta: ['攻撃力', '防御力', 'スピード', 'スタミナ', 'テクニック', 'メンタル'],
        fill: 'toself',
        name: 'プレイヤーA',
      }, {
        type: 'scatterpolar',
        r: [65, 90, 55, 80, 85, 70],
        theta: ['攻撃力', '防御力', 'スピード', 'スタミナ', 'テクニック', 'メンタル'],
        fill: 'toself',
        name: 'プレイヤーB',
      }]}
      layout={{
        polar: { radialaxis: { visible: true, range: [0, 100] } },
        height: 300,
        margin: { t: 20, b: 20, l: 40, r: 40 },
      }}
      style={{ width: '100%' }}
      config={{ responsive: true }}
    />
  );
}

5. Apache ECharts (echarts-for-react)

radarコンポーネントでindicatorを定義し、各軸の最大値を個別設定できる。シンプルなJSON設定で実装可能。

✓ 高カスタマイズ性✓ 軸ごと最大値設定✓ JSONベース設定

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

特徴: indicator 配列で各軸の名前と最大値を個別に設定できる。 SSRには非対応のためdynamic importが必要。
tsx
'use client';
import dynamic from 'next/dynamic';
const ReactECharts = dynamic(() => import('echarts-for-react'), { ssr: false });

export function EChartsRadarChart() {
  const option = {
    legend: { data: ['プレイヤーA', 'プレイヤーB'], top: 'top' },
    radar: {
      indicator: [
        { name: '攻撃力', max: 100 },
        { name: '防御力', max: 100 },
        { name: 'スピード', max: 100 },
        { name: 'スタミナ', max: 100 },
        { name: 'テクニック', max: 100 },
        { name: 'メンタル', max: 100 },
      ],
    },
    series: [{
      type: 'radar',
      data: [
        { value: [85, 70, 90, 60, 75, 80], name: 'プレイヤーA' },
        { value: [65, 90, 55, 80, 85, 70], name: 'プレイヤーB' },
      ],
    }],
  };
  return <ReactECharts option={option} style={{ height: 300 }} />;
}

6. ApexCharts (react-apexcharts)

type="radar"を指定するだけでレーダーチャートを実装。fill・markers・strokeで視覚表現を細かく制御できる。

✓ シンプルな設定✓ 複数系列対応✓ インタラクティブ

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

特徴: xaxis.categories で軸ラベルを設定し、yaxis.max で最大値を指定。SSRには非対応のためdynamic importが必要。
tsx
'use client';
import dynamic from 'next/dynamic';
const Chart = dynamic(() => import('react-apexcharts'), { ssr: false });

export function ApexRadarChart() {
  const options = {
    chart: { type: 'radar' as const, toolbar: { show: false } },
    xaxis: { categories: ['デザイン', 'パフォーマンス', 'ドキュメント', 'コミュニティ', '学習コスト'] },
    yaxis: { show: false, max: 150 },
    fill: { opacity: 0.4 },
    stroke: { width: 2 },
    markers: { size: 4 },
    colors: ['#3b82f6', '#10b981'],
    legend: { show: true },
    dataLabels: { enabled: false },
  };
  const series = [
    { name: 'ライブラリA', data: [120, 98, 86, 99, 85] },
    { name: 'ライブラリB', data: [110, 130, 130, 100, 90] },
  ];
  return <Chart type="radar" options={options} series={series} height={300} width="100%" />;
}

🤖 AIプロンプトテンプレート

React + Tailwind CSSで、ApexCharts(react-apexcharts)を使ったレーダーチャートを実装してください。

- 使用ライブラリ: react-apexcharts の Chart コンポーネント(dynamic importでSSR無効化)
- サンプルデータ: 2ライブラリのスペック比較5軸(デザイン・パフォーマンス・ドキュメント・コミュニティ・学習コスト)を用意すること
- データ形式: { name: 'ライブラリA', data: [120, 98, 86, 99, 85] } 形式の series 配列を渡すこと
- グラフ設定: type="radar"、chart.type: "radar"、toolbar非表示
- 軸設定: xaxis.categoriesに軸ラベル、yaxis.maxに最大値(150)を設定すること
- スタイリング: fill.opacityで透明度を設定し、markers.sizeでデータポイントを表示すること
- 凡例: legend.show: trueで複数系列の凡例を表示すること

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

ライブラリ比較

ライブラリ複数データグリッド形状アニメーションおすすめ用途
Recharts多角形Reactダッシュボード
Nivo円形・多角形切替デザイン重視
Chart.js多角形(デフォルト)シンプルな用途
Plotly.js円形科学系・インタラクティブ
Apache ECharts円形・多角形エンタープライズダッシュボード
ApexCharts多角形シンプルな比較ダッシュボード

レーダーチャートの活用シーン

適しているケース

  • スキルや能力値の比較(ゲーム、人事評価)
  • 製品スペックの多軸比較
  • パフォーマンス指標の可視化
  • アンケート結果の多次元分析

注意が必要なケース

  • !軸の数が多すぎると視認性が低下(3〜8軸推奨)
  • !軸のスケールが異なる場合は正規化が必要
  • !面積の大小が直感と一致しない場合がある

レーダーチャートの選択ポイント

  • Recharts: Reactアプリで手軽にレーダーチャートを導入したい場合。 宣言的なAPIで複数データの重ね合わせが直感的に記述できる。
  • Nivo: デザイン性を重視し、円形グリッドやドット表示など 見た目にこだわりたい場合。テーマ設定も充実。
  • Chart.js: 軽量かつ高速に描画したい場合。 Canvas描画のため多数のデータポイントでもパフォーマンスが安定。
  • Plotly.js: ズーム・パン・ホバーなどのインタラクティブ機能が標準装備。科学系・統計系グラフに特に強く、3Dグラフへの拡張も可能。
  • Apache ECharts: カスタマイズ性が非常に高く、ダッシュボード構築に適している。各軸ごとに最大値を独立して設定できるなど柔軟な設定が可能。
  • ApexCharts: xaxis.categories で軸ラベルを設定するシンプルな構造。fill・markers・strokeのオプションで視覚スタイルを簡潔に調整できる。

レーダーチャート(スパイダーチャート)は、複数の評価軸を放射状に並べ、各スコアを多角形で表現するグラフ。多項目の特性を一目で比較できる。

製品スペック比較・スキル評価・ゲームキャラクターのステータス表示など、複数の指標を同時に比較する場面で使われる。

主なバリエーション
  • 基本型(単一系列)
  • 複数系列比較型
  • 塗りつぶし型(fillOpacity)
  • カスタムラベル型
  • インタラクティブ型(tooltip付き)

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

2人のプレイヤーの能力値(6軸)を比較するデータを使用しています。各項目は0〜100のスコアで評価されています。

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