はじめに
この実験では、Python を使って Matplotlib のプロットで目盛りの間にラベルを中央に配置する方法を学びます。デフォルトでは、目盛りラベルはそれに関連付けられた目盛りに対して整列しますが、目盛りの間にラベルを中央に配置する直接的な方法はありません。ただし、大目盛りの間の小目盛りにラベルを配置し、大目盛りラベルと小目盛りを非表示にすることで、この動作を疑似的に再現することができます。この手法を示すために、Google の株価の金融データを使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
金融データの読み込み
まず、Matplotlib のcbook.get_sample_data()関数を使って Google の株価の一部の金融データを読み込む必要があります。ここでは、過去 250 日分のデータを使用します。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cbook as cbook
## 一部の金融データを読み込む;Google の株価
r = cbook.get_sample_data('goog.npz')['price_data'].view(np.recarray)
r = r[-250:] ## 過去 250 日分を取得する
プロットを作成する
次に、Matplotlib のsubplots()関数を使ってプロットを作成し、Google の株価の調整後終値を時間の経過とともにプロットします。
fig, ax = plt.subplots()
ax.plot(r.date, r.adj_close)
大目盛りと小目盛りのロケータとフォーマッタを設定する
目盛りの間にラベルを中央に配置するには、x 軸の大目盛りと小目盛りのロケータとフォーマッタを設定する必要があります。大目盛りと小目盛りのロケータを月に設定するためにdates.MonthLocator()関数を、小目盛りのラベルを月の略称にフォーマットするためにdates.DateFormatter()関数を使用します。
import matplotlib.dates as dates
import matplotlib.ticker as ticker
ax.xaxis.set_major_locator(dates.MonthLocator())
## 16 は、月の日数が異なるためわずかな近似値です。
ax.xaxis.set_minor_locator(dates.MonthLocator(bymonthday=16))
ax.xaxis.set_major_formatter(ticker.NullFormatter())
ax.xaxis.set_minor_formatter(dates.DateFormatter('%b'))
大目盛りラベルと小目盛りを削除する
目盛りの間にラベルを中央に配置する動作を疑似的に再現するには、大目盛りラベルと小目盛りを削除し、小目盛りラベルのみを表示する必要があります。これはtick_params()関数を使って、tick1Onとtick2OnパラメータをFalseに設定することで行えます。
## 目盛り線を削除する
ax.tick_params(axis='x', which='minor', tick1On=False, tick2On=False)
小目盛りラベルを整列させる
最後に、小目盛りラベルを大目盛りの間の中央に整列させる必要があります。これはget_xticklabels()関数を使って、小目盛りラベルを取得するためにminorパラメータをTrueに設定することで行えます。その後、ラベルをループして水平整列を'center'に設定します。
## 小目盛りラベルを整列させる
for label in ax.get_xticklabels(minor=True):
label.set_horizontalalignment('center')
imid = len(r) // 2
ax.set_xlabel(str(r.date[imid].item().year))
プロットを表示する
これで、show()関数を使ってプロットを表示できます。
plt.show()
まとめ
この実験では、Python を使って Matplotlib のプロットで目盛りの間にラベルを中央に配置する方法を学びました。この手法を示すために Google の株価の金融データを使用し、以下の手順に従いました。
- 金融データを読み込む
- プロットを作成する
- 大目盛りと小目盛りのロケータとフォーマッタを設定する
- 大目盛りラベルと小目盛りを削除する
- 小目盛りラベルを大目盛りの間の中央に整列させる
- プロットを表示する。