レーダーチャートライブラリ比較
6つの人気ライブラリで多軸データを視覚化し、レーダーチャートの実装を比較
1. Recharts
宣言的なAPIで直感的にレーダーチャートを構築。複数データの重ね合わせが簡単。
'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
美しいデフォルトスタイルとインタラクティブな操作が魅力のレーダーチャート
'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描画。シンプルな設定でレーダーチャートを表示。
'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が必要。'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設定で実装可能。
チャートを読み込み中...
indicator 配列で各軸の名前と最大値を個別に設定できる。 SSRには非対応のためdynamic importが必要。'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が必要。'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のスコアで評価されています。
関連する逆引きリファレンス
- → 色・スタイルのカスタマイズ(borderColor・fillOpacity など)
- → ツールチップのカスタマイズ(カスタムHTML・フォーマッタ)
- → 軸(Axis)の設定(ラベルフォーマット・対数スケール・複数軸)
- → レスポンシブ対応(コンテナ追従・アスペクト比・リサイズ)
- → アニメーション・トランジション(初期描画・データ更新・イージング)
- → 凡例(Legend)の配置・スタイル(位置・アイコン・系列トグル)
- → データラベルの表示(値・位置・フォーマッタ)
- → クリックイベント・インタラクション(クリック・ホバー・ブラシ選択)
- → グリッド線のカスタマイズ(表示制御・線スタイル・リファレンスライン)