Subscribed unsubscribe Subscribe Subscribe

matplotlibで図を作成する際の細かいところ

Python

matplotlibでグラフを実際に書くことが多くなってきたのですが、実際使うとなるとデフォルト設定ではなくもう少しいじりたいなと思うことが多々あります。一回グラフを作成してから、プレビューで画像編集をしてもいいのですが、出来る限りプロセスは簡単である方が作る方としては楽です。今回までで調べた細かい設定と、自分なりに関数を作ったものを載せます。

まず、図の保存時の余白について

これは

plt.savefig(filename = 'sample.png', dpi = 300, transparent = True, bbox_inches = 'tight', pad_inches = 0)

として保存してやると、グラフの余白が全くない状態で図が保存されます。

参考:
www40.atwiki.jp

次にyticklabelsの表示なのですが、y軸の値の桁数が多くなると{ x \times 10^{y}}と書きたくなります。
しかし、デフォルト設定だと(少なくとも自分の場合は)250000000とかふつうに表示されます。これでは有効数字もあったもんではないので、どうしたものかと調べていると、
villageofsound.hatenadiary.jp
こんな記事がありました。
しかし、各目盛りに{\times 10^{y}}がついていないのもなーと考えていたのですが、デフォルトでやり方がわからないなら関数化してしまえばいいじゃんと思い立ったので、実際にかいてみました。
以下その関数の定義です。

def exponent_mantissa(x):
	if(x >= 1000):
		log10_x = np.log10(x)
		exponent = int(log10_x)
		mantissa = 10**(log10_x % exponent)
		return r'$%.2f \times 10^{%d}$' % (mantissa, exponent)
	elif(x <= -1000):
		x = np.abs(x)
		log10_x = np.log10(x)
		exponent = int(log10_x)
		mantissa = 10**(log10_x % exponent)
		return r'$-%.2f \times 10^{%d}$' % (mantissa, exponent)
	else:
		return r'${}$'.format(x)

何をやっているかというと、引数xの値を判定して、4桁以上なら{ x \times 10^{y}}表記の文字列を返すという関数です。
{ x \times 10^{y}}の表記のx , yはそれぞれ仮数(mantissa)、指数(exponent)と呼ばれるそうです。
引数の常用対数をとると、その整数部分が指数となります。また、10の小数点以下の部分乗が仮数となります。
それぞれを文字列の値として埋め込んでやることで{ x \times 10^{y}}表記を可能にしています。
この関数をlist(map(exponent_mantissa, ytick))としてset_yticklabelsの引数として渡してやることで、y軸の目盛りのラベルと{ x \times 10^{y}}表記にできます。
参考画像を作るのが面倒なので載せていないサボり記事ですが、ご容赦ください。