Matplotlibのデフォルトスタイルの軸の範囲を変更、余白削除

Posted: | Tags: Python, Matplotlib

Matplotlib v2.0からデフォルトのスタイルが変わった

Pythonのグラフ描画ライブラリMatplotlibのデフォルトスタイルがバージョン2.0で変更になった。

全体的にモダンな感じの見た目になって良かったのだが、軸の範囲が変わりグラフの上限・下限に余白ができるようになった。

v2.0以降(現行)のデフォルトスタイル。

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 2 * np.pi, 0.1)
y = np.sin(x)

plt.plot(x, y)
plt.savefig('data/dst/matplotlib_style_default.png')
plt.show()

Matplotlib v2.0 default

グラフの上限・下限に余白がある。

以前のスタイルはスタイルシートclassicを適用する。

with plt.style.context('classic'):
    plt.plot(x, y)
    plt.savefig('data/dst/matplotlib_style_classic.png')
    plt.show()

Matplotlib classic

以前のスタイルでは、軸の上限・下限が整数値になるように切り上げられているが、整数値で収まる場合は余白はできないようになっていた。

なお、上の例では一時的にスタイルを適用するために、withブロックでplt.style.context('classic')としている。これ以降のコードにも適用したい場合はwithブロック無しでplt.style.use('classic')とすればよい。

余白がなくなるように軸の範囲を変更

現行のデフォルトスタイルでは、axes.xmarginおよびaxes.ymarginの値がともに0.05に設定されており、5%分の余白ができるようになっている。この値を0にすると余白がなくなる。

# mpl.rcParams['axes.autolimit_mode'] = 'round_numbers'
mpl.rcParams['axes.xmargin'] = 0
mpl.rcParams['axes.ymargin'] = 0

plt.plot(x, y)
plt.savefig('data/dst/matplotlib_style_change_axes_margin.png')
plt.show()

Matplotlib change axes margin

以前のスタイルのように、軸の上限・下限が整数値になるように切り上げたい場合は、上記axes.autolimit_modeの設定を有効化すればよい。

常にこの設定を適用したい場合は、Matplotlib設定保存用ディレクトリのmatplotlibrcに以下の内容を追加する。

# axes.autolimit_mode: round_numbers 
axes.xmargin: 0
axes.ymargin: 0

Matplotlib設定保存用ディレクトリはメソッドget_configdir()で確認できる。

import matplotlib as mpl

print(mpl.get_configdir())

Matplotlib設定保存用ディレクトリにmatplotlibrcという名前のファイルが存在しない場合は新規作成する。

matplotlibrcについての詳細は以下の記事も参照。

関連カテゴリー

関連記事