Channel Breakout Bot for bitflyer-FX (by Connie-Wild氏)読解メモ36

の続きです。
題材は https://github.com/Connie-Wild/ChannelBreakoutBot です。

plotメソッドの続きから。

    # X軸調整
    xdate = [i.strftime('%y-%m-%d %H:%M') for i in df.index]

ローソク足のindexはdateオブジェクトになっているのでこれを文字列にします。

    def dateformat(x, pos):
        try:
            return xdate[int(x)]
        except IndexError:
            return ''

このあとで利用するためにdateformatメソッドを作っておきます。
このメソッド内でしか使わないメソッドはメソッド内メソッドとして表現することができます。
先程の日時文字列配列のx番目を取得し、取得できなかった場合は空文字列を返すメソッドです。
posは利用されていないので無視して構いません。

    locate_size = len(ax.get_xticks())
    ax.xaxis.set_major_locator(ticker.MaxNLocator(locate_size))
    ax.xaxis.set_major_formatter(ticker.FuncFormatter(dateformat))

get_xticks はDocumentの記載だとよくわかりませんが、x軸のtickの位置のリストが返ってくるようなので、それのlenを取るとx軸の項目数=日時データ数となりそうです。
参考: https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.get_xticks.html
set_major_locator は目盛り位置を指定するもののようです。
参考: https://qiita.com/okadate/items/00227316187b60f861f5
ここでは日時データの個数分を最大目盛り数とするようです。
set_major_formatter で、x軸の値表示をフォーマットします。
参考: https://matplotlib.org/api/_as_gen/matplotlib.axis.XAxis.set_major_formatter.html
ticker.FuncFormatter を使うことでユーザ定義関数を指定できるので、事前に作っておいたdateformatメソッドを指定します。

15分経ったので今日はここまで。

↓次


この記事が気に入ったらサポートをしてみませんか?