【Python】CSVファイルから積み上げ棒グラフを作成し、x軸を表にする

■概要

以下の実装を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を以下に示す。

コメント