PythonのXlsxWriterモジュールでパターン塗りつぶしのExcel縦棒グラフを作成する方法
Excelのグラフは、1つ以上のデータポイントからなる「系列」が最低1つ含まれることで構成されます。そして各系列は、ワークシート上のセル範囲への参照によって定義されます。Excelシートにグラフをプロットする際の基本的な流れは以下の通りです。
- まず、目的のグラフタイプ(縦棒グラフなど)に対応するチャートオブジェクトを作成する
- 作成したチャートオブジェクトにデータ系列を追加する
- 最後に、そのチャートオブジェクトをワークシートオブジェクトに挿入する
サンプルコード
以下の例では、「shingle(屋根板)」と「horizontal_brick(横積みレンガ)」という2種類のパターンを使い分けた縦棒グラフを作成しています。
# xlsxwriterモジュールをインポート
import xlsxwriter
# Workbook()は、作成するファイル名を必須引数として受け取る
workbook = xlsxwriter.Workbook('chart_pattern.xlsx')
# workbookオブジェクトのadd_worksheet()メソッドで新しいワークシートを追加
worksheet = workbook.add_worksheet()
# add_format()メソッドでセルの書式を定義するFormatオブジェクトを作成
# ここでは太字(bold)フォーマットを作成
bold = workbook.add_format({'bold': 1})
# グラフが参照するワークシートデータを用意
headings = ['Shingle', 'Brick']
data = [
[105, 150, 130, 90],
[50, 120, 100, 110],
]
# 'A1'を起点に、太字フォーマットで見出し行を書き込む
worksheet.write_row('A1', headings, bold)
# 'A2'と'B2'を起点に、それぞれ1列ずつのデータを書き込む
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
# add_chart()メソッドでワークシートに追加可能なチャートオブジェクトを作成
# ここでは縦棒グラフ(type: column)を作成
chart = workbook.add_chart({'type': 'column'})
# add_series()メソッドでパターン付きのデータ系列をグラフに追加
# gapを指定すると、パターンがより見やすくなる
# '=Sheet1!$A$1'は['Sheet1', 0, 0]と同等の記法
# 注意:「=」と「Sheet1」、「Sheet1」と「!」の間にスペースを入れないこと
# スペースが入ると警告が発生する
chart.add_series({
'name': '=Sheet1!$A$1',
'values': '=Sheet1!$A$2:$A$5',
'pattern': {
'pattern': 'shingle',
'fg_color': '#804000',
'bg_color': '#c68c53'
},
'border': {'color': '#804000'},
'gap': 70,
})
# 2番目の系列を設定
chart.add_series({
'name': '=Sheet1!$B$1',
'values': '=Sheet1!$B$2:$B$5',
'pattern': {
'pattern': 'horizontal_brick',
'fg_color': '#b30000',
'bg_color': '#ff6666'
},
'border': {'color': '#b30000'},
})
# グラフタイトルを設定
chart.set_title({'name': 'Cladding types'})
# X軸のラベルを設定
chart.set_x_axis({'name': 'Region'})
# Y軸のラベルを設定
chart.set_y_axis({'name': 'Number of houses'})
# ワークシートにグラフを挿入
# グラフの左上隅はセルD2にアンカーされ、オフセット値で位置を微調整できる
worksheet.insert_chart('D2', chart, {'x_offset': 25, 'y_offset': 10})
# 最後にclose()メソッドでExcelファイルを閉じて保存
workbook.close()
コードのポイント解説
1. パターン塗りつぶしの指定方法
add_series()の'pattern'キーに辞書形式でパターン情報を渡すことで、系列全体に模様を適用できます。指定できる主な要素は次の3つです。
- pattern: 塗りつぶしの模様の種類(shingle、horizontal_brickなど)
- fg_color: パターンの前景色(線や図形部分の色)
- bg_color: パターンの背景色
2. 利用できる主なパターン
XlsxWriterでは、solid(単一色)、diagonal_brick(斜めレンガ)、small_grid(小さな格子)、wave(波状)、zigzag(ジグザグ)など、多数のパターンが用意されています。白黒印刷でも系列を区別しやすいグラフを作りたい場合などに特に有効です。
3. 系列参照の書き方
'=Sheet1!$A$1'のような文字列は、シート名・行・列をリスト形式(['Sheet1', 0, 0])で指定することもできます。なお、数式の先頭の「=」とシート名の間などに余計なスペースを挟むと警告が出るため、注意してください。
4. グラフの配置調整
insert_chart()の第3引数では、x_offset(横方向)とy_offset(縦方向)のオフセットをピクセル単位で指定できます。これにより、アンカーとなるセル(D2)からの表示位置を細かく調整することが可能です。
まとめ
XlsxWriterのpatternオプションを使えば、単色塗りつぶしでは表現しづらい視覚的な違いを、簡単にグラフへ反映できます。白黒印刷を前提とした資料や、色覚の多様性に配慮したユニバーサルデザイン対応のドキュメント作成においても、パターン塗りつぶしは非常に便利な機能です。
-
PythonのXlsxWriterモジュールでExcelワークシートにグラフを挿入する方法
Pythonには標準ライブラリ以外にも、個人開発者によって作られた優れた外部ライブラリが数多く存在し、Pythonにさまざまな追加機能をもたらしています。XlsxWriterもそのひとつで、Pythonプログラムのデータを含むExcelファイルを作成できるだけでなく、グラフ(チャート)の作成にも対応しています。 円グラフの作成手順 以下の例では、xlsxwriterを使って円グラフを作成します。処理の流れは以下のとおりです。 まずワークブックを定義し、その後にワークシートを追加します。 次にプロットするデータを定義し、Excelファイルのどの列にデータを書き込むかを指定します。 その列を参照
-
PythonのopenpyxlモジュールでExcelファイルを読み書きする方法【初心者向け完全ガイド】
Pythonには、Excelファイル(.xlsx)を操作するためのopenpyxlという便利なモジュールが用意されています。このモジュールを使えば、Excelファイルの新規作成、データの書き込み・読み取り、シートの追加や管理など、さまざまな操作をプログラムから自動的に行うことができます。 本記事では、openpyxlの基本的な使い方を、実際に動作するサンプルコードとともに順番に解説していきます。 openpyxlのインストール方法 openpyxlは標準ライブラリではないため、まずインストールが必要です。コマンドプロンプト(またはターミナル)で以下のコマンドを実行してください。 pip ins