Translate

【matplotlib】matplotlibでレーダーチャートっぽい図を作る方法【python】

 こんにちは。

Excelを使っていると、様々なグラフの書き方があり、見せたいデータに応じて使い分ける必要がありますよね。

折れ線グラフとか棒グラフといったグラフはよく使いますが、能力値とかパラメータとかといった要素をグラフとして可視化する上では、レーダーチャートの形式を使用することもあります。

理学療法とか作業療法の領域だとSTEFとかみたいな下位項目があるような評価を載せる上では非常によく役立ちます。

今回はpythonのグラフ描画パッケージであるmatplotlibを使ってレーダーチャートを作成する方法について紹介していこうと思います。


レーダーチャートは極座標プロットと呼ぶ



そもそもレーダーチャートってどうやって調べたら実践できるのかというと、検索ワードとしては極座標プロットと検索すると有益な情報が手に入ります。極座標プロットのことを説明している場合た大抵の場合レーダーチャートのことを指しています。

ここでも極座標プロットのことはレーダーチャートとして話していこうと思います。

レーダーチャートはmatplotlibでprojection = 'polar'を選択するとできる。

pythonでレーダーチャートを作成する場合には、グラフの元となる設定画面でprojection = 'polar'を設定することで作ることができます。

サンプルコードはこんな感じです。サンプルの中データはchatGPTで生成しています。

import numpy as np
import matplotlib.pyplot as plt

# カテゴリ(項目)のリスト
categories = ['項目1', '項目2', '項目3', '項目4', '項目5']

# サンプルデータ(各カテゴリの値)
data = [4, 3, 2, 5, 4]

# レーダーチャート用の設定
fig, ax = plt.subplots(subplot_kw={'polar': True})

# データ数を取得
num_categories = len(categories)

# 角度を計算
angles = np.linspace(0, 2 * np.pi, num_categories, endpoint=False).tolist()
angles += angles[:1]  # 閉じた多角形を描画するために最初の角度を追加

# データ表示
data += data[:1]  
ax.fill(angles, data, 'b', alpha=0.1)

こんな感じのコードになります。基本的には角度のどのくらい分割するのかを決めてそれに対応するデータの値を用意しておくのが定石になります。なので当然ですが、カテゴリとサンプルデータの数が必ず一致している必要があります。

このままだとレーダーチャートのデータだけが表示されるだけなので、これにさらに各項目のラベルを付けたりする場合には下記のコードを追加します。

ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
ax.yaxis.grid(True)

このコードを追加すると各項目のラベルとグリッド線が追加されます。こうやってカスタムしていく過程は、棒グラフや折れ線グラフ、散布図と大きな差はありません。
他のグラフ作成の記事もレーダーチャートを工夫することができるので合わせてみておくこともおすすめです。


レーダーチャートを使いこなしてデータを見やすくしよう。

レーダーチャートは個々に異なるパラメータを一気に表示して能力のバランスを見ることに長けているグラフの表示方法です。特に他の人の平均値を合わせて表示しておくとその人の能力の範囲、得意不得意の範囲がはっきりとわかるようになるので、そういった使い方をして自分自身のレポートをきれいに表示できるように作ってみましょう。