[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
を活用することで、さまざまなニーズに応じたグラフを作成できます。
この記事を参考に、実際にコードを書いて試してみてください。