【Pythonメモ】matplotに補助線入れる
やりたいこと
下のグラフなんだけど、どうみても2008/10らへんと2020/4らへんにめちゃくちゃ値が大きくなっている点があるので、
こんな感じで、補助線と目盛りいれてわかりやすくしたい
参考サイト
コード
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_locator
とminor_locator
の2種類があって、それをうまく使い分けるともっといろいろできそうだった
今回はまあこれくらいで十分ではないかと思ったので、終わり。