0
1

背景

エクセルではレーダーチャートにエラーバーを含めることができません。
この記事では、エラーバー付きのレーダーチャートをpython(matplotlib)で描画する方法を紹介します。

動作環境

  • Windows11
  • Ubuntu 22.04.3 LTS (WSL2)
    (Google Colabでも動作することを確認しています)

サンプルコード

エラーバー付きレーダープロットを描画

このプログラムにより、レーダープロットの各頂点にエラーバーを持ったグラフを作成できます。
実際にこのコードを使用する場合は、手持ちのデータを「label_list, value_list, error_list」に入れてプログラムを実行しましょう。目盛りの値など、パラメータを調整したい場合は、「#パラメータの指定」以下の値から変更できます。パラメータとレーダーチャートの対応は図中に示しています。

import matplotlib.pyplot as plt
import numpy as np

#ラベル、プロットする値、エラーバーを入力
label_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
value_list = [0.90, 0.85, 0.75, 0.80, 0.95, 0.70, 0.85, 0.88]
error_list =  [0.09, 0.1, 0.05, 0.20, 0.02, 0.020, 0.045, 0.1]
line_color = "blue"

#パラメータの指定

#リスト先頭の値のレーダープロット上の位置( "N", "NW", "W", "SW", "S", "SE", "E", "NE")
#Eだと、先頭の値が一番右(東)になる
theta_zero_location = "E"

#目盛りを入力
rgrids = [0, 0.25, 0.50, 0.75, 1]
#目盛り位置の角度
rgrids_angle = 75
#外枠の描画位置を入力
border_value = 1.05
#レーダーチャート中心の値を入力
center_value = 0

###################################################################################

#レーダーチャートの始点と終点をつなげるために、各リストの最後に最初の値を入れる
angle_list = [n / float(len(label_list)) * 2 * np.pi for n in range(len(label_list))]
angle_list.append(angle_list[0])
value_list.append(value_list[0])
error_list.append(error_list[0])

# レーダーチャートのフォーマットを作成
fig, ax = plt.subplots(1, 1, subplot_kw=dict(projection='polar'))
ax.set_rgrids([]) #目盛り線を削除
ax.spines['polar'].set_visible(False) #外枠線を削除
for grid_value in rgrids:
    grid_values = [grid_value] * (len(label_list)+1)
    ax.plot(angle_list, grid_values, '--',color="gray",  linewidth=0.5) #目盛り線を再描画
ax.plot(angle_list, [border_value] * (len(label_list)+1), '-',color="k",  linewidth=1) #外枠線を再描画
for t in rgrids:
    ax.text(x=np.pi * (rgrids_angle/180), y=t, s=t)
ax.set_rlim([center_value, border_value])

# レーダーチャートにプロット
ax.errorbar(angle_list, value_list, error_list,fmt='-o', linewidth=1, capsize=5,c=line_color)
ax.set_xticks(angle_list[:-1],label_list )
ax.set_theta_zero_location(theta_zero_location)

変数との対応.png

(おまけ)描画形式の変更

上記プログラムの「#レーダーチャートにプロット」を以下のように書き換えることで、エラーバーではない形式で誤差範囲を示すことができます。

# レーダーチャートにプロット
top_value_list = [acc+ye for acc,ye in zip(value_list,error_list)]
bottom_value_list = [acc-ye for acc,ye in zip(value_list,error_list)]
ax.plot(angle_list, value_list, linewidth=1, linestyle='-',c=line_color)
ax.plot(angle_list, top_value_list, linewidth=0.5, linestyle='-',c='grey')
ax.plot(angle_list, bottom_value_list, linewidth=0.5, linestyle='-',c='grey')
ax.fill_between(angle_list,top_value_list,color=line_color,alpha=0.1)
ax.fill_between(angle_list,bottom_value_list,color='w')
ax.set_xticks(angle_list[:-1],label_list )
ax.set_theta_zero_location(theta_zero_location)

output2.png

参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1