論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
レーダーチャート
Radar Chart
可視化
別称: クモの巣図

💡 30秒で分かる結論

複数項目を放射状に配置

🎨 直感で掴む

グラフの目的は「データを分かりやすく伝える」こと。 軸・凡例・出典・スケールを必ず明示してください。

本ページでは レーダーチャート を、 定義・前提条件・使い方・落とし穴の順に整理して解説します。 厳密な定義より、 まず何を、 いつ、 どう使うかを理解することを優先してください。

📐 定義

複数項目を放射状に配置

英語名 Radar Chart。 同義・関連語:クモの巣図。

🎯 いつ・どこで使うか

📋 前提条件・適用範囲

この用語を理解・使用するときは、 次のような前提を意識してください:

⚠️ よくある落とし穴

❌ 軸の切り取り
原点を切ると差が誇張されます。
❌ 色覚多様性
赤緑の組合せは識別困難な人がいます。 ColorBrewer のセットを推奨。
❌ 面積の誤解
半径を 2 倍にすると面積は 4 倍。 視覚的に強調されすぎる。

🐍 Python での扱い

SSDSE-B-2026 のような公的統計データを Python で扱う際の基本パターン:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd
import numpy as np

# データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
print(df.shape)
print(df.dtypes)
print(df.describe())

# 「レーダーチャート」の文脈で扱う場合の例:
# 分野: 可視化
# 関連手法は同カテゴリの他用語を参照してください。

具体的なコードは 1変量の可視化 を参照してください。

📝 レポートでの報告

分析結果を報告するときに含めるべき情報:

✅ チェックリスト

🔎 レーダーチャート ── 深掘り解説

レーダーチャート(Radar Chart) は、 多次元データ(複数指標)のプロファイル比較に使われる円形グラフ。 3〜8 指標程度の比較に適し、 9 指標以上では認知負荷が急増します。

🔖 キーワード索引(拡張)

レーダーチャートRadar Chartmatplotlibplotlyseaborn可視化データ可視化SSDSE-B都道府県色覚多様性凡例軸ラベルタイトルアクセシビリティ

📐 適用判断式

$$ \text{Area} = \frac{1}{2} \sum_{i=1}^{N} r_i r_{i+1} \sin\left(\frac{2\pi}{N}\right) $$

🧮 他可視化との比較

用途レーダー適代替
多指標プロファイル平行座標
時系列比較×折れ線
分布の形×箱ひげ
相関×散布図/ヒートマップ

🐍 Python 実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# matplotlib で 47 都道府県の主要 5 指標をレーダーチャート(東京vs沖縄)
import pandas as pd, numpy as np, matplotlib.pyplot as plt
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
df['高齢化率'] = df['A1301'] / df['A1101'] * 100
cols = ['高齢化率','A1101','A4101','C3301','E1101']
labels = ['高齢化率','総人口','出生数','製造業出荷','学校数']
metrics = df.set_index('Prefecture')[cols]
norm = (metrics - metrics.min()) / (metrics.max() - metrics.min())

angles = np.linspace(0, 2*np.pi, len(cols), endpoint=False).tolist()
angles += angles[:1]
fig, ax = plt.subplots(figsize=(6,6), subplot_kw=dict(polar=True))
for pref in ['東京都','沖縄県']:
    vals = norm.loc[pref].tolist(); vals += vals[:1]
    ax.plot(angles, vals, label=pref)
    ax.fill(angles, vals, alpha=0.2)
ax.set_xticks(angles[:-1]); ax.set_xticklabels(labels)
ax.legend(loc='upper right'); plt.tight_layout(); plt.savefig('radar.png', dpi=150)
 1
 2
 3
 4
 5
 6
 7
# plotly Express で同様
import plotly.express as px
long = norm.loc[['東京都','沖縄県']].reset_index().melt(id_vars='Prefecture')
long.columns = ['Prefecture','metric','value']
fig = px.line_polar(long, r='value', theta='metric',
                    color='Prefecture', line_close=True)
fig.write_html('radar.html')
 1
 2
 3
 4
 5
# 正規化方法の選択 : min-max vs standardization
from sklearn.preprocessing import StandardScaler
norm2 = pd.DataFrame(StandardScaler().fit_transform(metrics),
                      index=metrics.index, columns=metrics.columns)
print(norm2.loc['東京都'])
 1
 2
 3
 4
 5
 6
 7
 8
# レーダーの面積で「指標豊かさ」を比較
areas = []
for pref in metrics.index:
    v = norm.loc[pref].values
    area = 0.5 * np.sum(v * np.roll(v, -1) * np.sin(2*np.pi/len(v)))
    areas.append((pref, area))
top3 = sorted(areas, key=lambda x: -x[1])[:3]
print('面積トップ3:', top3)

⚠️ 落とし穴(レーダーチャート固有)

❌ 軸の範囲を恣意的に切る
「ゼロ起点でない棒グラフ」のような誤誘導につながります。 必ず範囲を明示。
❌ 色を増やしすぎる
5 色を超えると識別が困難になります。 グループ化やパターンを併用。
❌ 凡例・タイトル不足
情報の出典・期間・単位を必ず記載。
❌ 印刷・モノクロでの崩壊
デジタル前提のカラーパレットが印刷で識別不能になることがあります。

🔗 関連用語(拡張)

[並列]散布図 [並列]ヒストグラム [並列]ヒートマップ [並列]棒グラフ [並列]折れ線グラフ [並列]円グラフ [並列]レーダーチャート [並列]地理可視化 [並列]ネットワーク可視化 [発展]インタラクティブ可視化 [応用]相関係数 [応用]高齢化率 [発展]特徴量設計 [応用]標準化 [応用]正規性

📚 補足資料 — FAQ/追加コード/背景

FAQハンズオンSSDSE-BPython事例研究データ駆動教育

❓ よくある質問 (FAQ)

レーダーチャートはいつ使うのが最適?
3〜8 程度の指標で対象同士のプロファイル差を一目で比較したい時。
色の選び方は?
色覚多様性を考え viridis、 cividis、 ColorBrewer の colorblind-safe スキームを推奨。
matplotlib と Plotly どちらで描く?
静的論文は matplotlib、 探索/ダッシュボードは Plotly。 同じデータで両方残すと再利用可。
軸ラベル・凡例の必須情報は?
単位・出典・期間・サンプル数を必ず付ける。
印刷時のサイズは?
図の高さ・幅は 6×4 inch 程度を基本に。 dpi=150 以上で印刷品質。

🧪 SSDSE-B-2026 を使った追加計算例

用途レーダー代替SSDSE 例
プロファイル平行座標東京vs沖縄
時系列×折れ線高齢化率推移
分布×箱ひげ県別ばらつき
相関×散布図2変数関係
構成比棒/円年齢構成

🐍 さらにコードを書く

正規化と素データの違い

 1
 2
 3
 4
 5
 6
 7
 8
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
df['高齢化率'] = df['A1301']/df['A1101']*100
cols = ['高齢化率','A1101','A4101']
raw = df.set_index('Prefecture')[cols].loc[['東京都','沖縄県']]
print(raw)  # スケール差で潰れる例
norm = (raw - raw.min()) / (raw.max() - raw.min())
print(norm)

対称型レーダーでスコア比較

 1
 2
 3
 4
 5
 6
 7
 8
 9
import numpy as np, matplotlib.pyplot as plt
labels = ['高齢化率','出生率','学校数','医療','製造']
vals_a = [0.9, 0.2, 0.7, 0.8, 0.4]; vals_b = [0.3, 0.8, 0.5, 0.6, 0.9]
angles = np.linspace(0,2*np.pi,len(labels),endpoint=False); angles = np.append(angles, angles[0])
vals_a += vals_a[:1]; vals_b += vals_b[:1]
fig, ax = plt.subplots(subplot_kw=dict(polar=True))
ax.plot(angles, vals_a); ax.plot(angles, vals_b)
ax.set_xticks(angles[:-1]); ax.set_xticklabels(labels)
plt.tight_layout(); plt.savefig('compare.png', dpi=150)

レーダー禁止フラグ : 9 指標以上

 1
 2
labels = [f'指標{i}' for i in range(10)]
if len(labels) > 8: print('WARNING: 8 指標を超えたら平行座標を検討')

💡 実務的アドバイス

🕰 歴史的背景・発展経緯

レーダーチャート は古典的可視化手法の一つで、 統計可視化の標準教科書 (Tufte, Cleveland) でも扱われます。

matplotlib (2003-) は MATLAB ライクな API で広く普及。 ggplot2 (R, 2007) で文法 of graphics が確立。 Vega-Lite / Altair (2017) が宣言型表現を Web に持ち込みました。

近年は SVG/Canvas/WebGL の多層実装が普及し、 大規模データでもブラウザ可視化が可能に。 GPU 利用の Datashader, deck.gl が研究機関で活躍。