[Python] エクセルワークシートにグラフを作成する方法
Pythonでエクセルワークシートにグラフを作成するには、主にライブラリopenpyxlやxlsxwriterを使用します。
これらのライブラリは、エクセルファイルの読み書きや編集をサポートしており、グラフの作成も可能です。
openpyxlでは、Chartクラスを使用してグラフを作成し、データ範囲を指定してワークシートに追加します。
xlsxwriterでは、add_chart()メソッドを使用してグラフを作成し、insert_chart()メソッドでワークシートに挿入します。
これにより、データの視覚化が容易になり、エクセルファイルの分析が効率的に行えます。
openpyxlを使ったエクセルグラフの作成
Pythonでエクセルファイルを操作する際に便利なライブラリの一つがopenpyxlです。
このライブラリを使うことで、エクセルファイルの読み書きだけでなく、グラフの作成も可能です。
ここでは、openpyxlを使ってエクセルワークシートにグラフを作成する方法を解説します。
openpyxlの基本的な使い方
openpyxlを使用するには、まずライブラリをインストールする必要があります。
以下のコマンドでインストールできます。
pip install openpyxlインストールが完了したら、Pythonスクリプト内でopenpyxlをインポートして使用します。
import openpyxlワークシートの作成とデータの入力
まずは、エクセルファイルを作成し、ワークシートにデータを入力します。
from openpyxl import Workbook
# 新しいワークブックを作成
wb = Workbook()
ws = wb.active
# データを入力
data = [
['Month', 'Sales'],
['January', 100],
['February', 150],
['March', 200]
]
for row in data:
ws.append(row)
# ファイルを保存
wb.save("sales_data.xlsx")このコードでは、月ごとの売上データをエクセルファイルに保存しています。
グラフオブジェクトの生成
次に、グラフオブジェクトを生成します。
openpyxlでは、openpyxl.chartモジュールを使用してグラフを作成します。
from openpyxl.chart import BarChart, Reference
# バーチャートオブジェクトを作成
chart = BarChart()
# データ範囲を指定
data = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=4)
categories = Reference(ws, min_col=1, min_row=2, max_row=4)
# グラフにデータを追加
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)グラフの種類と選択
openpyxlでは、さまざまな種類のグラフを作成できます。
ここでは、バーチャートを例にしていますが、他にもラインチャートやパイチャートなどがあります。
| グラフの種類 | 説明 |
|---|---|
| BarChart | 棒グラフ |
| LineChart | 折れ線グラフ |
| PieChart | 円グラフ |
グラフのカスタマイズ
グラフをカスタマイズすることで、見やすくすることができます。
タイトルとラベルの設定
グラフにタイトルやラベルを設定することができます。
# グラフのタイトルを設定
chart.title = "Monthly Sales"
# X軸とY軸のタイトルを設定
chart.x_axis.title = "Month"
chart.y_axis.title = "Sales"軸の設定とスタイル変更
軸のスタイルや範囲を変更することも可能です。
# Y軸の範囲を設定
chart.y_axis.majorGridlines = None
chart.y_axis.minorGridlines = Noneグラフの保存と表示
最後に、作成したグラフをワークシートに追加し、エクセルファイルとして保存します。
# グラフをワークシートに追加
ws.add_chart(chart, "E5")
# ファイルを保存
wb.save("sales_data_with_chart.xlsx")このコードを実行すると、指定した位置にグラフが追加されたエクセルファイルが保存されます。
これで、openpyxlを使ったエクセルグラフの作成が完了です。
xlsxwriterを使ったエクセルグラフの作成
xlsxwriterは、Pythonでエクセルファイルを作成するための強力なライブラリです。
このライブラリを使用すると、エクセルファイルにグラフを追加することができます。
ここでは、xlsxwriterを使ってエクセルワークシートにグラフを作成する方法を解説します。
xlsxwriterの基本的な使い方
まず、xlsxwriterを使用するためにライブラリをインストールします。
以下のコマンドを使用してインストールできます。
pip install xlsxwriterインストール後、Pythonスクリプト内でxlsxwriterをインポートして使用します。
import xlsxwriterワークブックとワークシートの作成
xlsxwriterを使って新しいワークブックとワークシートを作成します。
# 新しいワークブックを作成
workbook = xlsxwriter.Workbook('sales_data.xlsx')
# 新しいワークシートを追加
worksheet = workbook.add_worksheet()データの書き込み
次に、ワークシートにデータを書き込みます。
# データを定義
data = [
['Month', 'Sales'],
['January', 100],
['February', 150],
['March', 200]
]
# データをワークシートに書き込む
row = 0
for month, sales in data:
worksheet.write(row, 0, month)
worksheet.write(row, 1, sales)
row += 1このコードでは、月ごとの売上データをワークシートに書き込んでいます。
グラフの追加と設定
ワークシートにグラフを追加し、設定を行います。
# グラフオブジェクトを作成
chart = workbook.add_chart({'type': 'column'})
# グラフにデータを追加
chart.add_series({
'categories': '=Sheet1!$A$2:$A$4',
'values': '=Sheet1!$B$2:$B$4',
'name': 'Sales'
})グラフの種類と選択
xlsxwriterでは、さまざまな種類のグラフを作成できます。
以下は一般的なグラフの種類です。
| グラフの種類 | 説明 |
|---|---|
| column | 棒グラフ |
| line | 折れ線グラフ |
| pie | 円グラフ |
グラフのフォーマットとスタイル
グラフのフォーマットやスタイルを設定することで、見た目を調整できます。
# グラフのタイトルと軸ラベルを設定
chart.set_title({'name': 'Monthly Sales'})
chart.set_x_axis({'name': 'Month'})
chart.set_y_axis({'name': 'Sales'})
# グラフのスタイルを設定
chart.set_style(10)グラフの保存と表示
最後に、グラフをワークシートに追加し、ワークブックを保存します。
# グラフをワークシートに追加
worksheet.insert_chart('D2', chart)
# ワークブックを保存
workbook.close()このコードを実行すると、指定した位置にグラフが追加されたエクセルファイルが保存されます。
これで、xlsxwriterを使ったエクセルグラフの作成が完了です。
pandasとmatplotlibを使ったエクセルグラフの作成
Pythonでデータ分析を行う際に、pandasとmatplotlibは非常に有用なライブラリです。
pandasを使ってデータを操作し、matplotlibでグラフを作成し、それをエクセルファイルに埋め込むことができます。
ここでは、その方法を解説します。
pandasとmatplotlibの基本的な使い方
まず、pandasとmatplotlibを使用するためにライブラリをインストールします。
以下のコマンドを使用してインストールできます。
pip install pandas matplotlib openpyxlインストール後、Pythonスクリプト内でこれらのライブラリをインポートして使用します。
import pandas as pd
import matplotlib.pyplot as pltデータフレームの作成と操作
pandasを使ってデータフレームを作成し、データを操作します。
# データを辞書として定義
data = {
'Month': ['January', 'February', 'March'],
'Sales': [100, 150, 200]
}
# データフレームを作成
df = pd.DataFrame(data)
# データフレームを表示
print(df)このコードでは、月ごとの売上データをデータフレームとして作成しています。
matplotlibでのグラフ作成
matplotlibを使ってデータフレームからグラフを作成します。
# グラフを作成
plt.figure(figsize=(8, 6))
plt.bar(df['Month'], df['Sales'], color='skyblue')
# グラフのタイトルとラベルを設定
plt.title('Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales')
# グラフを表示
plt.show()このコードでは、pandasのデータフレームを使って棒グラフを作成しています。
エクセルファイルへのグラフの埋め込み
作成したグラフをエクセルファイルに埋め込みます。
# グラフを保存
plt.savefig('sales_chart.png')
# エクセルファイルにデータフレームを書き込み
with pd.ExcelWriter('sales_data.xlsx', engine='openpyxl') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
# ワークブックとワークシートを取得
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# グラフをワークシートに埋め込む
worksheet.insert_image('D2', 'sales_chart.png')このコードでは、matplotlibで作成したグラフを画像として保存し、それをエクセルファイルに埋め込んでいます。
グラフのカスタマイズと保存
グラフの見た目をカスタマイズし、エクセルファイルに保存します。
# グラフのスタイルをカスタマイズ
plt.style.use('ggplot')
# グラフを再作成
plt.figure(figsize=(8, 6))
plt.bar(df['Month'], df['Sales'], color='coral')
plt.title('Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales')
# カスタマイズしたグラフを保存
plt.savefig('custom_sales_chart.png')
# エクセルファイルにカスタマイズしたグラフを埋め込む
with pd.ExcelWriter('custom_sales_data.xlsx', engine='openpyxl') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
worksheet = writer.sheets['Sheet1']
worksheet.insert_image('D2', 'custom_sales_chart.png')このコードでは、グラフのスタイルを変更し、カスタマイズしたグラフをエクセルファイルに埋め込んでいます。
これで、pandasとmatplotlibを使ったエクセルグラフの作成が完了です。
応用例
Pythonを使ってエクセルファイルにグラフを作成する基本的な方法を学んだ後は、さらに応用的な使い方を試してみましょう。
ここでは、複数のシートにグラフを作成したり、動的なデータに基づいてグラフを更新したり、グラフを自動生成するスクリプトを作成する方法を紹介します。
複数シートへのグラフ作成
複数のシートに異なるデータセットのグラフを作成することができます。
以下の例では、xlsxwriterを使って複数のシートにグラフを追加します。
import xlsxwriter
# 新しいワークブックを作成
workbook = xlsxwriter.Workbook('multi_sheet_charts.xlsx')
# シート1のデータ
worksheet1 = workbook.add_worksheet('Sheet1')
data1 = [['Month', 'Sales'], ['January', 100], ['February', 150], ['March', 200]]
for row, (month, sales) in enumerate(data1):
worksheet1.write(row, 0, month)
worksheet1.write(row, 1, sales)
# シート2のデータ
worksheet2 = workbook.add_worksheet('Sheet2')
data2 = [['Month', 'Revenue'], ['January', 120], ['February', 180], ['March', 240]]
for row, (month, revenue) in enumerate(data2):
worksheet2.write(row, 0, month)
worksheet2.write(row, 1, revenue)
# シート1にグラフを追加
chart1 = workbook.add_chart({'type': 'column'})
chart1.add_series({'categories': '=Sheet1!$A$2:$A$4', 'values': '=Sheet1!$B$2:$B$4', 'name': 'Sales'})
worksheet1.insert_chart('D2', chart1)
# シート2にグラフを追加
chart2 = workbook.add_chart({'type': 'line'})
chart2.add_series({'categories': '=Sheet2!$A$2:$A$4', 'values': '=Sheet2!$B$2:$B$4', 'name': 'Revenue'})
worksheet2.insert_chart('D2', chart2)
# ワークブックを保存
workbook.close()このコードでは、2つのシートにそれぞれ異なるデータセットのグラフを作成しています。
動的データに基づくグラフの更新
動的なデータに基づいてグラフを更新することも可能です。
例えば、データが変化するたびにグラフを再生成するスクリプトを作成できます。
import pandas as pd
import matplotlib.pyplot as plt
# 動的データの例
data = {
'Month': ['January', 'February', 'March'],
'Sales': [100, 150, 200]
}
# データフレームを作成
df = pd.DataFrame(data)
# データを更新する関数
def update_data(new_sales):
df['Sales'] = new_sales
plt.figure(figsize=(8, 6))
plt.bar(df['Month'], df['Sales'], color='lightgreen')
plt.title('Updated Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.savefig('updated_sales_chart.png')
plt.close()
# 新しいデータでグラフを更新
update_data([110, 160, 210])このコードでは、update_data関数を使ってデータを更新し、グラフを再生成しています。
グラフの自動生成スクリプトの作成
定期的にデータを取得し、グラフを自動生成するスクリプトを作成することもできます。
以下は、データをCSVファイルから読み込み、グラフを生成するスクリプトの例です。
import pandas as pd
import matplotlib.pyplot as plt
# CSVファイルからデータを読み込む
df = pd.read_csv('sales_data.csv')
# グラフを自動生成する関数
def generate_chart():
plt.figure(figsize=(8, 6))
plt.plot(df['Month'], df['Sales'], marker='o', linestyle='-')
plt.title('Auto-generated Sales Chart')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.savefig('auto_generated_sales_chart.png')
plt.close()
# グラフを生成
generate_chart()このスクリプトは、CSVファイルからデータを読み込み、グラフを自動生成して保存します。
これにより、データが更新されるたびに新しいグラフを生成することができます。
まとめ
Pythonを使ってエクセルファイルにグラフを作成する方法を学ぶことで、データの視覚化がより簡単になります。
openpyxlやxlsxwriter、pandasとmatplotlibを活用することで、さまざまなニーズに応じたグラフを作成できます。
この記事を参考に、実際にコードを書いて試してみてください。