【Pythonメモ】matplotに補助線入れる

やりたいこと

下のグラフなんだけど、どうみても2008/10らへんと2020/4らへんにめちゃくちゃ値が大きくなっている点があるので、

f:id:iiiiikamirin:20200607095402p:plain

こんな感じで、補助線と目盛りいれてわかりやすくしたい

f:id:iiiiikamirin:20200607225153p:plain

参考サイト

qiita.com

コード

def get_line_graph(input_DataFrame : pd.DataFrame,
                   line_graph_save_path : 'str'):

    #  グラフ中の補助線
    auxiliary1 = dt.date(2020, 4, 8)
    auxiliary2 = dt.date(2008, 10, 8)
    x_list = [dtdt(2007, 6, 8) + relativedelta(months=12 * i) for i in range(13)]
    x_list.append(auxiliary1)
    x_list.append(auxiliary2)

    fig = plt.figure(figsize=(12, 8))
    ax = fig.add_subplot(1, 1, 1)

    ax.plot(date2num(input_DataFrame.index),
            input_DataFrame.values)
    ax.plot([date2num(auxiliary1),date2num(auxiliary1)],
            [10 ** -9, 10 ** 0], color = 'red', linestyle = 'dashed')
    ax.plot([date2num(auxiliary2),date2num(auxiliary2)],
            [10 ** -9, 10 ** 0], color = 'red', linestyle = 'dashed')
    ax.set_xlim(date2num([input_DataFrame.index.min(),
                          input_DataFrame.index.max()]))
    ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))
    new_x_scale = date2num(x_list)
    ax.xaxis.set_major_locator(ticker.FixedLocator(new_x_scale))
    ax.tick_params(axis='x', rotation=315)

    ax.set_yscale('log')
    ax.set_ylim(10 ** -9, 10 ** 0)
    ax.legend(labels=input_DataFrame.columns.values)

    new_y_scale = [j * 10 ** -i for i in range(1, 10, 1) for j in range(1, 10, 1)]
    new_y_scale = [round(new_y_scale[n], 10) for n in range(len(new_y_scale))]
    ax.set(yticks=new_y_scale)
    ax.grid(which='major', color='black', lw=0.2)

    fig.savefig(line_graph_save_path)
    plt.figure()

    return

調べているとmajor_locatorminor_locatorの2種類があって、それをうまく使い分けるともっといろいろできそうだった

今回はまあこれくらいで十分ではないかと思ったので、終わり。