Python XlsxWriterモジュールでExcelシートに複合グラフを描画する方法
XlsxWriterは、PythonからExcelファイルを操作するためのライブラリです。ファイルの作成やデータの書き込みはもちろん、算術演算やグラフの描画まで、幅広い操作を簡単に行うことができます。
本記事では、XlsxWriterを使って縦棒グラフと折れ線グラフを1つのグラフ領域に組み合わせた「複合グラフ(コンビネーションチャート)」をExcelシートに描画する方法を解説します。
複合グラフとは
複合グラフとは、種類の異なる複数のグラフを重ねて表示するグラフのことです。例えば、数量の推移を縦棒グラフで表し、傾向や変化を折れ線グラフで同時に示すといった使い方ができます。XlsxWriterでは、combine()メソッドを使うことで、主グラフ(プライマリーチャート)に副グラフ(セカンダリーチャート)を簡単に組み合わせられます。
サンプルコード
# xlsxwriterモジュールをインポート
import xlsxwriter
# Workbook()には、作成したいファイル名を必須引数として渡します。
workbook = xlsxwriter.Workbook('chart_combined.xlsx')
# add_worksheet()メソッドでワークブックに新しいワークシートを追加します。
worksheet = workbook.add_worksheet()
# add_format()メソッドでセルの書式を設定するFormatオブジェクトを作成します。
# ここでは太字(bold)のフォーマットオブジェクトを作成しています。
bold = workbook.add_format({'bold': True})
# グラフが参照するデータを定義します。
headings = ['Number', 'Batch 1', 'Batch 2']
data = [
[2, 3, 4, 5, 6, 7],
[10, 40, 50, 20, 10, 50],
[30, 60, 70, 50, 40, 30],
]
# A1セルを起点に、太字形式で見出し行を書き込みます。
worksheet.write_row('A1', headings, bold)
# A2、B2、C2を起点として、それぞれ列方向にデータを書き込みます。
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
worksheet.write_column('C2', data[2])
# add_chart()メソッドでチャートオブジェクトを作成します。
# ここでは縦棒(column)グラフを作成し、主グラフとして使用します。
column_chart1 = workbook.add_chart({'type': 'column'})
# add_seriesメソッドでグラフにデータ系列を追加します。
# 注意:「=」とSheet1、Sheet1と「!」の間にスペースを入れると警告が出るので挿入しないでください。
column_chart1.add_series({
'name': '=Sheet1!$B$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$B$2:$B$7',
})
# 折れ線(line)グラフを作成し、副グラフとして使用します。
line_chart1 = workbook.add_chart({'type': 'line'})
# 副グラフ用のデータ系列を設定します。
line_chart1.add_series({
'name': '=Sheet1!$C$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$C$2:$C$7',
})
# 縦棒グラフと折れ線グラフを結合します。
column_chart1.combine(line_chart1)
# グラフタイトルを設定します。
column_chart1.set_title({'name': 'Combined chart - same Y axis'})
# X軸のラベルを設定します。
column_chart1.set_x_axis({'name': 'Test number'})
# Y軸のラベルを設定します。
column_chart1.set_y_axis({'name': 'Sample length (mm)'})
# オフセット値を指定して、グラフの左上隅をD2セルに固定して挿入します。
worksheet.insert_chart('D2', column_chart1, {'x_offset': 25, 'y_offset': 10})
# 最後にclose()メソッドでExcelファイルを閉じます。
workbook.close()
コードのポイント
このコードの処理の流れは以下のとおりです。
- ワークブックとワークシートの作成:
xlsxwriter.Workbook()で新しいExcelファイルを作成し、add_worksheet()でシートを追加します。 - データの書き込み:
write_row()で見出しを行方向に、write_column()で各系列のデータを列方向に書き込みます。 - 主グラフの作成:
add_chart({'type': 'column'})で縦棒グラフを作成し、「Batch 1」のデータを系列として登録します。 - 副グラフの作成:
add_chart({'type': 'line'})で折れ線グラフを作成し、「Batch 2」のデータを系列として登録します。 - グラフの結合:
combine()メソッドにより、両者が同じY軸を共有する複合グラフになります。 - タイトル・軸ラベルの設定:
set_title()、set_x_axis()、set_y_axis()でグラフの体裁を整えます。 - ワークシートへの挿入:
insert_chart()でD2セルを基準にグラフを挿入し、最後にclose()でファイルを保存して終了します。
スクリプトを実行すると、カレントディレクトリに「chart_combined.xlsx」が生成されます。ファイルを開くと、縦棒グラフと折れ線グラフが組み合わされた複合グラフがD2セル付近に表示され、2つのデータ系列を一目で比較できるようになっています。
-
PythonのXlsxWriterモジュールでExcelワークシートにグラフを挿入する方法
Pythonには標準ライブラリ以外にも、個人開発者によって作られた優れた外部ライブラリが数多く存在し、Pythonにさまざまな追加機能をもたらしています。XlsxWriterもそのひとつで、Pythonプログラムのデータを含むExcelファイルを作成できるだけでなく、グラフ(チャート)の作成にも対応しています。 円グラフの作成手順 以下の例では、xlsxwriterを使って円グラフを作成します。処理の流れは以下のとおりです。 まずワークブックを定義し、その後にワークシートを追加します。 次にプロットするデータを定義し、Excelファイルのどの列にデータを書き込むかを指定します。 その列を参照
-
PythonのopenpyxlモジュールでExcelファイルを読み書きする方法【初心者向け完全ガイド】
Pythonには、Excelファイル(.xlsx)を操作するためのopenpyxlという便利なモジュールが用意されています。このモジュールを使えば、Excelファイルの新規作成、データの書き込み・読み取り、シートの追加や管理など、さまざまな操作をプログラムから自動的に行うことができます。 本記事では、openpyxlの基本的な使い方を、実際に動作するサンプルコードとともに順番に解説していきます。 openpyxlのインストール方法 openpyxlは標準ライブラリではないため、まずインストールが必要です。コマンドプロンプト(またはターミナル)で以下のコマンドを実行してください。 pip ins