【Python】pandasというライブラリを使ってCSVファイルを読み込み、積上げ棒グラフを作成する。


pythonを使用してExcelファイルの操作を勉強しています。
本日の気づき(復習)は、CSVの読み込みとグラフ作成に関しての続きです。
pythonでExcelを操作するため、openpyxlというパッケージを使用しています。

売上.csv
部門,1月,2月,3月
商品A,600,700,800
商品B,4100,3800,4500
商品C,2900,1800,3000
商品D,800,900,1000
商品E,600,550,720

前回同様、上記のようなCSVファイルを読み込み

この様な積上げ棒グラフを作り貼り付けたいです。

BarChartオブジェクトのgrouping属性と、overlap属性

bar.grouping = 'stacked'
bar.overlap = 100

基本的には棒グラフを作成する場合と同じですが
grouping属性を'stacked'、overlap属性を 100
にすれば、積上げ棒グラフになるのですが
今回の表はもう一工夫必要です。

グラフの参照データを、行/列で切り替え

bar.add_data(Referenceオブジェクト, from_rows=True, titles_from_data=True)

先ずは、元となるデータの範囲を変更して
上記のように「from_rows=True」を記述すると
グラフの参照データを、行/列で切り替える事が出来ます。

最終的なコード

import pandas as pd
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.utils.dataframe import dataframe_to_rows

wb = Workbook()
ws = wb.active

# CSVファイル読込み
df = pd.read_csv('売上.csv', encoding='utf-8')
for row in dataframe_to_rows(df, index=None, header=True):
    # データを1行ずつ追加
    ws.append(row)

# 棒グラフを選択
bar = BarChart()

# 横棒グラフに設定
bar.type = 'col'

# 積上げ棒グラフに変更
bar.grouping = 'stacked'
bar.overlap = 100

# グラフのデータ範囲を設定
data = Reference(ws, min_col=1, min_row=2,
                 max_col=ws.max_column, max_row=ws.max_row)

# ラベルの範囲を設定
labels = Reference(ws, min_col=2, min_row=1, max_col=ws.max_column)

# グラフにデータを追加(参照方法を行列で切り替え)
bar.add_data(data, from_rows=True, titles_from_data=True)

# 縦軸のラベルを追加
bar.set_categories(labels)

# 系列ごとにグラフの色を変更
bar.varyColors = True

# 凡例項目の位置を設定
bar.legend.position = 'b'

# 横軸(グラフ上では縦軸)タイトルを追加
bar.x_axis.title = '月度'

# 縦軸(グラフ上では横軸)タイトルを追加
bar.y_axis.title = '売上高(千円)'

# グラフのタイトルを追加
bar.title = '部門別売上高'

# 棒グラフをシートに追加
ws.add_chart(bar, 'A9')

wb.save('部門別売上_積上げ棒グラフ.xlsx')

前回、前々回と同じデータを基にグラフを作っていますが
表現方法でだいぶ印象が変わりますね。

どこで使うモノなのかを考えながら作成するといい感じですね。