レーダーチャート(スパイダーチャート)は、複数の評価項目を 1 つの図にまとめ、全体のバランスや得意・不得意を一目で示せるグラフです。人事評価、商品の比較、アンケート結果の可視化など、「複数の観点で対象を比べたい」場面に向いています。 本記事では、Spire.XLS for Python を使って Python で Excel にレーダーチャートを作成する方法 を紹介します。基本のレーダーチャートと、塗りつぶしレーダーチャートの 2 種類を作り、評価軸の目盛りや凡例、塗りの透明度までコードで設定します。 クイックナビゲーション 準備:評価データと実行環境 「形」と「面積」で読むレーダーチャート 基本のレーダーチャートを作る 塗りつぶしレーダーチャートで面的に比較する レーダーチャートが向く場面・向かない場面 まとめ FAQ 準備:評価データと実行環境 検証環境は Spire.XLS for Python 16.8.2 と plum-dispatch v1.7.4 です。Excel をインストールしていなくても、pip だけで試せます。 pip install Spire.XLS コードの先頭では、Spire.XLS の 2 つのモジュールを読み込みます。 from spire.xls import * from spire.xls.common import * サンプルは、山田 太郎さんと佐藤 花子さんの 2 名について、6 つの評価項目を 1〜5 の 5 段階で採点した表です。A1 に「評価項目」、B1:C1 に氏名、A2:A7 に評価項目、B2:C7 に評価値が入ります。 評価項目 山田 太郎 佐藤 花子 コミュニケーション 4 2 業務経験 3 5 作業効率 4 4 リーダーシップ 3 4 問題解決力 5 3 チームワーク 5 3 評価項目が行、評価対象が列に並んでいる点が、この表の特徴です。レーダーチャートでは、この向きに合わせて SeriesDataFromRange を False に設定します。系列が行方向に並ぶ表なら True、列方向なら False です。 新規ブックは 3 枚のシートから始まるので、CreateEmptySheets(1) で 1 枚に絞り、Version を 2016 にしておきます。不要なシートが残らず、配布しやすいファイルになります。 「形」と「面積」で読むレーダーチャート レーダーチャートは、中心から放射状に伸びる軸(スポーク)で構成されます。各軸が 1 つの評価項目を表し、中心が最小値、外周が最大値です。データ点を軸上に打ち、同じ系列の点を線で結ぶと、その対象のプロフィールが多角形として浮かび上がります。 要素 役割 主なプロパティ 系列 評価対象ごとの多角形。ここでは山田さん・佐藤さん Chart.Series 項目軸 各スポークの評価項目 Chart.PrimaryCategoryAxis 数値軸 中心からの距離に対応する評価値 Chart.PrimaryValueAxis 凡例 線や塗りの色と評価対象の対応 Chart.Legend レーダーチャートを読むときは、次の 3 点を押さえてください。 形(バランス) — 多角形が正六角形に近いほど、評価が偏っていないことを示します。外側に張り出した軸が得意分野、中心に近い軸が苦手分野です。 面積 — 全体の評価の大きさをつかみやすくなります。ただし、面積だけで優劣を判断すると、軸の順番や目盛りの範囲に影響されます。 重なり — 2 つの多角形を重ねると、共通して高い項目と、差が大きい項目が分かります。 評価項目の順番を変えると、多角形の形も変わります。複数のレーダーチャートを並べるときは、項目の順番と目盛りの範囲を揃えてください。 基本のレーダーチャートを作る 最初に作るのは、線だけで描く標準のレーダーチャートです。ExcelChartType.Radar を指定すると、評価項目ごとの点を結んだ多角形が描かれます。 処理の流れは、データ入力 → 表の整形 → グラフ追加 → 軸と凡例の設定の 4 段階です。まずはデータを書き込み、レーダーチャートを追加するところまでを 1 本のコードにまとめます。 from spire.xls import * from spire.xls.common import * CRITERIA = [ "コミュニケーション", "業務経験", "作業効率", "リーダーシップ", "問題解決力", "チームワーク", ] PEOPLE = { "山田 太郎": [4, 3, 4, 3, 5, 5], "佐藤 花子": [2, 5, 4, 4, 3, 3], } # Workbook オブジェクトを作成し、シートを 1 枚にする workbook = Workbook() workbook.Version = ExcelVersion.Version2016 workbook.CreateEmptySheets(1) sheet = workbook.Worksheets[0] sheet.Name = "RadarChart" # 評価項目と評価値を入力 sheet.Range["A1"].Text = "評価項目" for j, (name, _) in enumerate(PEOPLE.items(), start=2): sheet.Range[1, j].Text = name for i, criterion in enumerate(CRITERIA, start=2): sheet.Range[i, 1].Text = criterion for j, (_, values) in enumerate(PEOPLE.items(), start=2): sheet.Range[i, j].NumberValue = values[i - 2] # 表の体裁を整える sheet.Rows[0].RowHeight = 20 sheet.Range["A1:C1"].Style.Color = Color.get_DarkBlue() sheet.Range["A1:C1"].Style.Font.Color = Color.get_White() sheet.Range["A1:C1"].Style.Font.IsBold = True sheet.Range["A1:C1"].Style.Font.Size = 11 sheet.Range["B1:C7"].Style.HorizontalAlignment = HorizontalAlignType.Center sheet.Range["A1:C7"].Style.VerticalAlignment = VerticalAlignType.Center sheet.Range["A2:C7"].Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin sheet.Range["A2:C7"].Style.Borders[BordersLineType.EdgeBottom].Color = Color.get_DarkBlue() sheet.Columns[0].ColumnWidth = 20 sheet.Columns[1].ColumnWidth = 14 sheet.Columns[2].ColumnWidth = 14 # レーダーチャートを追加 chart = sheet.Charts.Add(ExcelChartType.Radar) chart.DataRange = sheet.Range["A1:C7"] chart.SeriesDataFromRange = False # グラフの位置を指定(D4:N29 付近) chart.LeftColumn = 4 chart.TopRow = 4 chart.RightColumn = 14 chart.BottomRow = 29 # タイトル、プロットエリア、凡例を設定 chart.ChartTitle = "社員の業績評価" chart.ChartTitleArea.IsBold = True chart.ChartTitleArea.Size = 14 chart.PlotArea.Fill.Visible = False chart.Legend.Position = LegendPositionType.Corner # 1〜5 の評価尺度を明確にする chart.PrimaryValueAxis.MinValue = 0 chart.PrimaryValueAxis.MaxValue = 5 chart.PrimaryValueAxis.MajorUnit = 1 chart.PrimaryValueAxis.HasMajorGridLines = True workbook.SaveToFile("SimpleRadarChart.xlsx", ExcelVersion.Version2016) workbook.Dispose() SeriesDataFromRange = False は、列方向に系列(評価対象)が並んでいることを示します。True にすると行方向の評価項目が系列として扱われ、6 系列になります。表の向きに合わせて必ず指定してください。 PrimaryValueAxis の MinValue / MaxValue / MajorUnit を 0・5・1 に固定すると、5 段階評価の目盛りが等間隔に並びます。目盛りの範囲が自動で変わると、同じ 4 点でもグラフ上の位置が変わって見えるため、評価尺度を揃えることは比較の前提になります。 PlotArea.Fill.Visible = False は、プロットエリアの背景色を消してグラフを軽く見せるための設定です。Legend.Position に LegendPositionType.Corner を指定すると、凡例をグラフの隅に配置できます。 塗りつぶしレーダーチャートで面的に比較する 塗りつぶしレーダーチャートは、多角形の内側を色で塗る形式です。線だけのレーダーチャートよりも形(面積)が強調されるため、全体のバランスを伝えたいときに向いています。 シンプル版のコードをベースに、グラフの種類と塗りの設定を次のように変更します。 # グラフの種類を塗りつぶしレーダーに変更 chart = sheet.Charts.Add(ExcelChartType.RadarFilled) chart.DataRange = sheet.Range["A1:C7"] chart.SeriesDataFromRange = False # 位置・タイトル・凡例・軸はシンプル版と同じ # ... # ARGB のアルファ値で半透明の塗り色を作る(128 ≈ 50%) colors = [Color.FromArgb(128, 65, 105, 225), Color.FromArgb(128, 255, 69, 0)] for idx, raw in enumerate(chart.Series): cs = ChartSerie(raw) cs.Format.Fill.ForeColor = colors[idx] 塗りつぶしレーダーでは、後から描いた系列が前面に来ます。2 つの多角形をそのまま重ねると、後ろの系列が隠れてしまうため、Color.FromArgb() の第 1 引数(アルファ値)で半透明の色を作ります。128 は約 50% の不透明度で、2 つの面が重なる部分は混色になり、共通して高い項目と差が大きい項目の両方が見えます。 Color.FromArgb(128, 65, 105, 225) はロイヤルブルー、Color.FromArgb(128, 255, 69, 0) はオレンジレッドに、それぞれ 50% の透明度を加えた色です。アルファ値は 0〜255 で、小さくするほど透明になります。 塗りつぶしは形の比較には便利ですが、細かい値の差は読み取りにくくなります。正確な数値を伝えたいときは、線だけのレーダーチャートや表を併用してください。 出力ファイル名は FilledRadarChart.xlsx とします。 レーダーチャートが向く場面・向かない場面 レーダーチャートは、複数項目のバランスを一度に見せたい場面で力を発揮します。一方で、項目ごとの正確な大小比較や時系列の変化には、別のグラフのほうが適しています。 レーダーチャートが向く場面 別のグラフが向く場面 5〜8 個の評価項目で、全体のバランスを見たい 項目ごとの正確な大小を比べたい → 棒グラフ 2 人・2 製品のプロフィールを重ねて比べたい 時系列の変化を見たい → 折れ線グラフ 評価の偏りや得意・不得意をひと目で示したい 項目が多すぎる、系列が 4 本以上 → 表や棒グラフ レーダーチャートは面積の大きさで優劣を判断しがちですが、軸の順番や目盛りの範囲で印象が変わります。評価項目の順番を固定し、目盛りを 0〜5 のように揃えて比較してください。正確な値も伝えたいときは、元の表やデータラベルを併記すると誤解を防げます。 項目ごとの大小を並べて比べたい場合は、Python で Excel に横棒グラフを作成する方法 が参考になります。時系列の変化を見たい場合は、Python で Excel に折れ線グラフを作成する方法 で折れ線グラフの作り方を解説しています。 まとめ レーダーチャートを作るときに押さえる設定は、次の 4 つです。 系列の向き — SeriesDataFromRange = False。評価項目が行、評価対象が列 目盛り — MinValue = 0 / MaxValue = 5 / MajorUnit = 1 塗り — Color.FromArgb(128, R, G, B) で半透明にする 凡例 — Legend.Position = LegendPositionType.Corner レーダーチャートは、複数の評価項目を 1 つの多角形にまとめ、全体のバランスを伝えるグラフです。評価項目の順番と目盛りを揃え、必要に応じて棒グラフや折れ線グラフと使い分けてください。 Spire.XLS for Python の全機能を評価したい場合は、30 日間の無料ライセンスを申請できます。なお無償の試用版では、保存したファイルに評価用の警告シートが追加されます。ライセンスを適用するとこれも出力されなくなります。 FAQ レーダーチャートとスパイダーチャートは同じものですか? 同じものです。Excel では「レーダーチャート」と呼びますが、蜘蛛の巣のような見た目から「スパイダーチャート」とも呼ばれます。Spire.XLS for Python では ExcelChartType.Radar または ExcelChartType.RadarFilled を指定します。 評価軸の目盛りを 0〜5 に固定するには? Chart.PrimaryValueAxis.MinValue に 0、MaxValue に 5、MajorUnit に 1 を設定します。目盛りを固定すると、複数のグラフを並べたときに評価値の位置を比較しやすくなります。 塗りつぶしの透明度を変えるには? Color.FromArgb(アルファ値, R, G, B) のアルファ値を変えます。128 で約 50% の不透明度、255 で不透明、0 に近づくほど透明になります。塗り色は ChartSerie(raw).Format.Fill.ForeColor に代入します。 3 人以上を重ねると読みにくくなりますか? 3 系列までは比較しやすいですが、それ以上になると多角形の重なりが多くなり、形の違いを読み取りにくくなります。評価対象が多い場合は、2〜3 人ずつに分けるか、棒グラフや表を併用してください。 評価項目の順番は変えられますか? 変えられます。表の行の順番を入れ替えると、レーダーチャートの軸の順番も変わります。ただし、複数のグラフを比較するときは、すべてのグラフで同じ順番に揃えてください。順番が違うと、同じデータでも多角形の形が変わって見えます。 線だけのレーダーと塗りつぶしはどちらを選べばよいですか? 評価対象のプロフィールを面的に見せたいなら塗りつぶし、正確な値や線の交点を読み取りたいなら線だけのレーダーが向いています。塗りつぶしは 2 系列までを半透明で重ね、それ以上は線だけのレーダーや別のグラフに分けると読みやすくなります。