【Pythonメモ】時間軸の間隔調整

やりたいこと

datetime型の軸の間隔を、調整したい

とびとびになっているこの図を f:id:iiiiikamirin:20200607100116p:plain

こんな感じで任意の間隔に設定する f:id:iiiiikamirin:20200607095402p:plain

参考サイト

qiita.com

コード

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import date2num
from matplotlib.dates import DateFormatter
from matplotlib import ticker
from datetime import datetime as dtdt
import datetime as dt
import pandas as pd
from dateutil.relativedelta import relativedelta

(略)

    #  グラフ作成
    fig = plt.figure(figsize = (12, 8))
    ax = fig.add_subplot(1, 1, 1)

    ax.plot(date2num(SFE_DataFrame.index),
            SFE_DataFrame.values)
    ax.set_xlim(date2num([SFE_DataFrame.index.min(),
                          SFE_DataFrame.index.max()]))
    ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))
    new_x_scale = date2num([dtdt(2007,6,8) + relativedelta(months = 6 * i)
                           for i in range(26)])
    ax.xaxis.set_major_locator(ticker.FixedLocator(new_x_scale))
    ax.tick_params(axis='x', rotation = 315)

    ax.set_yscale('log')
(y軸設定らへんは略)

    ax.grid(which = 'both', color = 'black', lw = 0.2)

    fig.savefig('output/testSFE.png')

日付に関しては、エクセルのシリアル値みたいに内部では数字で管理しているのかなあと思った

詳しいことはわからんけど!!

   new_x_scale = date2num([dtdt(2007,6,8) + relativedelta(months = 6 * i)
                           for i in range(26)])

上の部分がなんか汚いなあって感じ