matplotlib 入門 (1) nitta@tsuda.ac.jp

matplotlib は非常に柔軟なシステムであり、ある機能を実現するための記述方法がいくつもある。 これは一見便利な機能ではあるが、初学者にとっては matplotlib がわかりにくい原因の一つとなっていると思われる。

そこで、少なくとも初心者のうちは、本稿に示す鉄則を守って matplotlib を使い始めることを勧める。

鉄則[1]: 最初に、必要な個数の座標系(Axes)を一度に作成する。

まずは、次のコードで必要な個数の座標系 (Axes) ax を取得する。
fig, ax = plt.subplots(rows, cols, figsize=(width * cols, height * rows))

Parameters:
     rows : 座標系の行数
     cols : 座標系の列数
     width : 各座標系の横幅 ($\times 100$ px)
     height : 各座標系の縦幅 ($\times 100$ px)
Returns:
     fig : Figure
     ax : Axes
        1要素    if rows == 1 and cols ==1
        1次元配列    else if rows == 1 and cols ==1
        2次元配列    else if rows > 1 and cols > 1

鉄則[2]: 描画は各座標系 (Axes) に対して行う。すなわち、Axes オブジェクトの描画メソッドや軸設定メソッドを使う。

鉄則[3]: 各座標系 (Axes) に描画した内容を画面に表示するには、最後に1度だけ plt.show() で行う。

描画内容を画面に表示するには、各座標系ではなく、pltに対して行う。
plt.show()

鉄則[4]: 各座標系 (Axes) に描画した内容をファイルに保存するには、解像度を指定して plt.savefig() で行う。

描画内容をファイルに保存するには、各座標系ではなく plt に対して行う。 デフォルトの解像度が低いので、 dpi=600 のように解像度を指定すること。
plt.savefig(filepath,dpi=dpi)

1章 座標系 (Axes object) を理解する

1-1: ax が一つの座標系の場合

plt.suplots() の関数呼び出しにおいて rows == 1 and cols == 1 の場合は、ax にひとつの座標系 (Axes object) が返されるので、この ax に対して描画コマンドを発行する。

fig, ax = plt.subplots(1, 1, ...)


最後に plt.show() で jupyter notebook のページ内にインラインで描画される。

最初の行の '%matplotlib inline' は jupyter notebook の中でグラフを表示するときに指定する命令で、「Webページ内にインラインで表示しろ」と指定している。

ax.plot(x座標の配列, y座標の配列)で折れ線グラフを描く。

1-2: axが座標系の1次元配列の場合

plt.suplots() の関数呼び出しにおいて rowscols のどちらか一方だけが $1$ の場合は、ax に座標系 (Axes object) の1次元配列が返される。

rows==1 and cols > 1 の場合は、横方向に配置される座標系が返される(sample code 1-2-1)。

fig, ax = plt.subplots(1, 2, ...)


rows > 1 and cols == 0 の場合は、縦方向に配置される座標系が返される(sample code 1-2-2)。

fig, ax = plt.subplots(2, 1, ...)


1-3: ax が座標系の2次元配列の場合

plt.suplots() の関数呼び出しにおいて rows > 1 and cols > 1 の場合、ax には座標系 (Axes object) の2次元配列が返される。

fig, ax = plt.subplots(2, 2, ...)


1-4: 各座標系 (Axes) の下部に文字列を表示する

座標系 (Axes object)の間の間隔は plt.subplots_adjust() で設定する。縦方向は hspace パラメータで、 横方向は wspace パラメータで設定する。

座標系の下に文字を表示する空間を確保するので、 表示領域全体の大きさを縦方向に広げる必要がある。 そのため、 plt.suplots(..., figsize=(width, height)) の呼び出しで、 引数figsize パラメータに指定する height を大きくする。

また、座標系間を縦方向に離して配置するために、 plt.subplots_adjust(hspace=height) を呼び出す。

文字列の描画は、座標系に対して text(x, y, str, ha=..., transform=...) 関数で行う。 transform パラメータに各座標系の transAxesを設定することが重要である。 文字の位置は xyha で指定する。

1-5: 各座標系 (Axes) に描画した内容をまとめた画像 (Figure) をファイルに保存する

保存する画像ファイルのパス (path) と、解像度 (dpi) を指定して、描画内容をファイルに保存する。 保存する画像ファイルのフォーマットはファイル名の拡張子で指定する。 sample code 1-5 では png 形式で保存している。