OpenPyXLのRadarChartクラスを使って、Excelのワークシートにレーダーチャートを作成したり、その種類を変更したりする方法を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
values = [
['Team', 'A', 'B', 'C'],
['Attack', 85, 70, 65],
['Defense', 72, 58, 65],
['Organize', 83, 55, 68],
['Talent', 80, 78, 55],
['Budget', 69, 80, 55]
]
for v in values:
ws.append(v)
wb.save('sample_chart.xlsx')
from openpyxl.chart import Reference, RadarChart
rmin = ws.min_row
rmax = ws.max_row
cmin = ws.min_column
cmax = ws.max_column
chart = RadarChart()
chart.type = 'standard' # 'filled', 'marker', 'standard'
labels = Reference(ws, min_col=cmin, min_row=rmin+1, max_row=rmax)
data = Reference(ws, min_col=cmin+1, max_col=cmax, min_row=rmin, max_row=rmax)
chart.add_data(data, titles_from_data=True)
chart.set_categories(labels)
chart.title = 'Team analysis'
chart.anchor = 'A10'
ws.add_chart(chart)
wb.save('sample_chart.xlsx')
# レーダーチャートの種類を変更
chart.type = 'marker'
wb.save('sample_chart.xlsx')
chart.type = 'filled'
wb.save('sample_chart.xlsx')
本稿では以下のコードで作成したワークシートを例に取る。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
values = [
['Team', 'A', 'B', 'C'],
['Attack', 85, 70, 65],
['Defense', 72, 58, 65],
['Organize', 83, 55, 68],
['Talent', 80, 78, 55],
['Budget', 69, 80, 55]
]
for v in values:
ws.append(v)
これは架空のチームA、B、Cの攻撃力、守備力、組織性、個人能力、予算を数値化したものだ。Aは予算が(Bと比べて)少ないことを除けば、全ての面で優れている。Bは潤沢な予算を使って能力の高い選手を獲得しているが、それがチーム全体の攻撃力や守備力につながっていないようだ。Cは少ない予算と他の2チームに比べると能力が低い選手を組織化してほどほどの成績を上げていると考えられる。
これをExcelで表示したものを以下に示す。
OpenPyXLを使ってレーダーチャートを作成するには、openpyxl.chart.RadarChartクラスを使用する。その手順は以下の通り。
レーダーチャート(RadarChart)で設定できる項目としては以下がある(一部)。
属性 | 説明 |
---|---|
type属性 | レーダーチャートの種類を指定 |
title属性 | グラフのタイトル |
anchor属性 | グラフの挿入位置 |
width属性 | グラフの横幅 |
height属性 | グラフの高さ |
ser属性 | 系列ごとのマーカーや線種の設定 |
レーダーチャートに設定可能な項目(一部) |
type属性にはレーダーチャートの種類を指定する。指定可能な値は'standard'(標準のレーダーチャート)、'marker'(マーカー付きレーダーチャート)、'filled'(塗りつぶしレーダーチャート)のいずれかだ。マーカー付きレーダーチャートにするときには、各系列のmarker.symbol属性などでマーカーの形状や線色、塗りつぶし色などを指定する。
RadarChartクラスを使って散布図を作成するための基本となるコードを以下に示す。x_axis.title属性やy_axis.title属性は設定可能だが、グラフ描画では使用されないようだ。レーダーチャートなのでX軸が表示されることはなく、特に何も指定をしないとデフォルトでY軸が表示されるがあまり意味がない。
レーダーチャートを表示するコードの例を以下に示す。
from openpyxl.chart import Reference, RadarChart
rmin = ws.min_row
rmax = ws.max_row
cmin = ws.min_column
cmax = ws.max_column
chart = RadarChart()
chart.type = 'standard' # 'filled', 'marker', 'standard'
labels = Reference(ws, min_col=cmin, min_row=rmin+1, max_row=rmax)
data = Reference(ws, min_col=cmin+1, max_col=cmax, min_row=rmin, max_row=rmax)
chart.add_data(data, titles_from_data=True)
chart.set_categories(labels)
chart.title = 'Team analysis'
chart.anchor = 'A10'
ws.add_chart(chart)
このコード例では、RadarChartクラスのインスタンスを作成している。その後、変数labelsに項目名となるセル範囲を指定し、変数dataにはグラフ描画の基となるセル範囲を指定している(系列名を含む)。そして、add_dataメソッドでそれらをグラフに設定している(このときには、変数dataに指定したセル範囲に系列名が含まれていることを示すために「titles_from_data=True」を指定している。
このコードを実行すると、次のようなグラフが描かれる。
特に指定をしない限り、上の画像のグラフ中央上部にあるようにY軸が無意味に表示されてしまう。これを抑制するにはy_axis.delete属性をTrueにする。
chart.y_axis.delete = True
これによりY軸が表示されないようになる。
レーダーチャートの種類をマーカー付きにするには、type属性に'marker'を指定して、マーカーの種類や大きさなどを指定する。
Copyright© Digital Advantage Corp. All Rights Reserved.