オブジェクト指向インターフェースでグラフを書くpython

python はネット情報を適当にコピペしても動くので、ほとんど何も考えなくてもある程度は動きます。

でも、ちょっと調べてみると、ある程度はそれなりにきちんと理解して動かした方がいいようです。

参考サイト

早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話
Matplotlib plt.subplots()の使い方|FigureとAxesを同時生成!
を参考にさせて頂きました。

作成するグラフ

ケーナの練習時間を棒グラフと線グラフをそれぞれ別のグラフで表示します。
こんな感じです。

プログラム

プログラムはとても短くて簡単です。


import matplotlib.pyplot as plt
import pandas as pd
 
df = pd.read_excel('/home/user/ケーナ練習記録.ods', engine="odf", sheet_name="Sheet1")

df.rename(columns={"日付": "date",
                   "練習時間": "daily_training",
                   "累積時間": "total_training"},
          inplace=True)

x = df.date
y1 = df.daily_training
y2 = df.total_training

fig, axes = plt.subplots(2, 1, squeeze=False, tight_layout=True)
 
axes[0,0].bar(x, y1)
axes[0,0].set_title("練習時間(1日)", fontsize=10)
axes[1,0].plot(x, y2)
axes[1,0].set_title("合計練習時間", fontsize=10)

fig.autofmt_xdate()
plt.show()

ポイント

  1. libreoffice から DataFrame にデータを読み込む。
  2. データの項目名を日本語から英語に書き換える。
  3. DataFrame から x, y へデータを読み込む。
  4. グラフを描画してタイトルを表示する。
  5. x 軸(日付)はそのままでは重なってしまうので、autofmt で調整する。

以前やったような、リストに append なんてする必要はありませんでした。

でも一つ疑問があって、2つのグラフのうち下の方のY軸のサイズを変更しようとしたのですがどうしてもできませんでした。