0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-04-12

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ファイルを読み込み

image.png

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

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')

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0