OpenPyXL㉕ (グラフを作成)

グラフを作成

openpyxl.chart で定義されているクラスを使うと、ワークシートのデータから グラフ を作成することができます

グラフ を作成する手順は次のようになります。

  1. グラフオブジェクトの生成
    グラフの種類に対応したオブジェクトを作成します。
  2. グラフタイトル等の設定
    グラフオブジェクトのプロパティを使って、グラフの棒や線のスタイル、グラフのタイトル、縦軸と横軸のタイトルを設定します。
  3. データ用のReferenceオブジェクトの生成
    グラフのデータが入力されているセル範囲を指定します。
  4. カテゴリデータ用のReferenceオブジェクトの生成
    カテゴリデータは入力されているセル範囲を指定します。
  5. グラフオブジェクトへのデータ用Referenceオブジェクトの追加
    グラフオブジェクトにデータ用Referenceオブジェクトを追加します。
  6. グラフオブジェクトへのカテゴリのReferenceオブジェクトの追加
    add_dataメソッドで、グラフオブジェクトにカテゴリのReferenceオブジェクトを追加します。
  7. 位置を指定してグラフを配置
    add_chartメソッドにグラフオブジェクト、グラフを配置する基準にするセル番地を指定して、ワークシートにグラフを配置します。

下記のサンプルソースでは、BarChartコンストラクタ を使って棒グラフを作成しています。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import openpyxl
from openpyxl.chart import BarChart, Series, Reference

book = openpyxl.Workbook() # ブックを生成
sheet = book.active # アクティブなシートを取得

rows = [
('月', '商品1', '商品2'), # タイトル行
(1, 320, 435), # 12行のレコードデータ
(2, 130, 530),
(3, 440, 60),
(4, 550, 770),
(5, 260, 410),
(6, 370, 640),
(7, 580, 630),
(8, 625, 430),
(9, 720, 230),
(10, 580, 340),
(11, 670, 450),
(12, 605, 755),
]
for row in rows: # 行数のぶんだけ繰り返す
sheet.append(row) # ワークシートに追加する

#### 列ごとに棒グラフを作成 ####
chart1 = BarChart() # 棒グラフのオブジェクトを生成
chart1.type = 'col' # 列ごとにタテ棒を表示する
chart1.style = 10 # グラフのスタイルを設定
chart1.title = '年間売上' # メインタイトル
chart1.y_axis.title = '売上高' # タテ軸のタイトル
chart1.x_axis.title = '月' # ヨコ軸のタイトル

# データが入力されているセル範囲
data = Reference(sheet, # 対象のワークシート
min_col=2, # 開始列
min_row=1, # 開始行
max_col=3, # 終端列
max_row=13 # 終端行
)

# カテゴリデータのセル範囲
cats = Reference(sheet, # 対象のワークシート
min_col=1, # 開始列
min_row=2, # 開始行
max_row=13) # 終端行

# BarChartオブジェクトにデータを追加
chart1.add_data(data, titles_from_data=True)

# BarChartオブジェクトにカテゴリを追加
chart1.set_categories(cats)

# ワークシート上にグラフを追加
sheet.add_chart(chart1, # 対象のワークシート
'A15' # グラフエリアの左上隅をA16セルに合わせる
)

book.save('Test.xlsx') # ブックを保存

[Test.xlsx]

保存したExcelファイルを確認すると、棒グラフが作成されていることを確認できます。