■概要
以下の実装をpythonを使用して行う。
- csvファイルからデータを読み込む。
- 棒グラフを作成する。(各データを色分けして累積)
- 棒グラフのx軸はcsvデータを表にしたものとする。
■フローチャート
本処理のフローチャートを以下に示す。
■サンプルコード
本処理に使用するモジュールとcsvファイルを以下に示す。
・モジュール
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 先頭列をインデックスとしてCSV読み込み
input_data = pd.read_csv('data.csv', index_col=0)
# 行列を取得
year_rows = list(input_data.index)
kind_columns = list(input_data.columns)
# データ部を格納
datas = input_data.to_numpy()
# カラーマップの設定
colors = plt.cm.BuPu(np.linspace(0, 0.5, len(year_rows)))
# データ部の行数を取得
n_rows = len(datas)
# グラフのインデックスと幅を設定
index = np.arange(len(kind_columns)) + 0.3
bar_width = 0.4
# 積み上げ棒グラフの垂直オフセットを初期化
y_offset = np.zeros(len(kind_columns))
# 棒グラフをプロットし、表のテキストラベルを作成する
cell_text = []
for row in range(n_rows):
plt.bar(index,
datas[row],
bar_width,
bottom=y_offset,
color=colors[row])
y_offset = y_offset + datas[row]
cell_text.append([x for x in datas[row]])
# 色とテキストラベルを反転(降順)
cell_text.reverse()
year_rows.reverse()
colors = colors[::-1]
# x軸に表を追加
plt.table(cellText=cell_text,
rowLabels=year_rows,
rowColours=colors,
colLabels=kind_columns,
loc='bottom')
# 表のスペースを確保
plt.subplots_adjust(left=0.2, bottom=0.2)
# y軸ラベルの設定
plt.ylabel("amount")
# x軸のメモリ設定をなしにする
plt.xticks([])
# グラフと表の表示
plt.show()
・csvファイル(data.csv)
year,A,B,C,D
2020,10,12,15,18
2021,20,27,26,25
2022,30,31,39,35
2023,40,45,40,41
■実行結果
実行結果を以下に示す。
■参考
本処理を作成するにあたり、参考とさせていただいたURLを以下に示す。
コメント