Yamamoto's Laboratory
基本事項
理解すべきこと

基本事項

プロット作成

matplotlib.pyplotは,MATLAB のように機能させるコマンドスタイル関数のコレクションです.これを使うと,Python で様々なプロットが作成ができます.

Matplotlib を使うためには,matplotlib.pyplot インポートします.これ (matplotlib.pyplot) はプロットを作成するための関数の集合です.これに含まれる関数は,Figure (プロット領域) の作成やラベルの装飾,プロットの作成などの機能を提供します.要するに,matplotlib.pyplot インポートし,それに含まれる関数を使うとプロットの作成ができるということです.

用語の説明

Matplotlib 用語

図1に,Matplotlib のプロットで使う用語を示します.プロット作成のアプリケーションではお馴染みの用語だと思います.ただし,Excel とは異なりますが...Matplotlib 特有の用語は「Figure」と「Axis」です.これらの詳細は次節で説明が,簡単に言うと前者はひとつ以上の Axis を含んだ描画領域で後者はプロットのことです.

マニュアルを見ると「Artist」とう用語もしばしば遭遇します.

図1: Matplotlib の用語 (ソースコード)

Figure と Axis の違い

Matplotlib では Figure と Axes (Axis) という単語が,しばしば使われます.文字通りの図とか軸 (x軸, y軸, z軸) として使われる場合もありますが,しばしば以下の意味で使われます.

  • Figure はひとつ以上の Axes からなる最終的なイメージです.
  • Axes は個々のプロットです (x軸やy軸の軸ではないです).

図2に,Figure と Axis を示します.ひとつの Figure に4個の Axis (複数形で Axes) があります.それにしても,なんでプロットが Axis なんだ.分かり難いし,多くの人が誤った認識を持つでしょう.

図2: Figure と Axis (ソースコード)

重要な用語

Figure

Figure は全ての Axes と Artist, Canvas を持ちます.Figure は少なくともひとつ以上の Axis を持ちます.プロットを作成する台紙の

Artist

Figure や Axes,Axis オブジェクトを含めて,Figure に表示されるものはすべて ARTIST です.これには,Text オブジェクトや Line2D オブジェクト,collections オブジェクト,Patch オブジェクトなどです.Figure がレンダリングされると,すべてのアーティストがキャンバスに描画されます. ほとんどのアーティストは斧に縛られています。 このようなアーティストは、複数の軸で共有したり、ある軸から別の軸に移動したりすることはできません。 

Matplotlib のインターフェース

Matplotlib には,二つのインターフェース (オブジェクト指向 API と Pyplot) あります.プロット作成には,オブジェクト指向インターフェースを使うことを強く勧めます.

オブジェクト指向 API インターフェースの例

このインターフェースでは,Axis のインスタンスを用いて,プロットを作成します.

# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

# --- プロットデータの作成 ---
x = np.linspace(-50, 50, 512)
y = np.sin(x)*np.exp(-np.abs(x)/10)

#  --- プロットの作成 OO-API ---
fig = plt.figure()            # Figure インスタンス作成
ax  = fig.add_subplot(1,1,1)  # Axis インスタンス作成
ax.set_xlabel("x", fontsize=14, fontname='serif')
ax.set_ylabel("y", fontsize=14, fontname='serif')
ax.tick_params(axis='both', length=10, which='major')
ax.tick_params(axis='both', length=5,  which='minor')
ax.set_xlim([-50, 50])
ax.set_ylim([-1.0,1.0])
ax.minorticks_on()
ax.plot(x, y, 'r-')

# ----- プロットの表示 -----
fig.tight_layout()
plt.show()

# ----- プロットファイルの作成 -----
fig.savefig('sin_exp.pdf', orientation='portrait')
fig.savefig('sin_exp.svg', orientation='portrait')

fig.clf()

図3: 作成されたプロット

Pyplot インターフェース の例

pyplot の関数は,Figure を作成するための機能がそろっています.たとえば Figure を作成し,そこにプロット描画します.プロット領域にいくつかの線をプロットし,ラベルで装飾することなどができます.pyplot の関数は,主にインタラクティブなプロットと単純なプログラムによるプロット生成を対象です.

# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

# --- プロットデータの作成 ---
x = np.linspace(-50, 50, 512)
y = np.sin(x)*np.exp(-np.abs(x)/10)

#  --- プロットの作成 OO-API ---
plt.xlabel("x", fontsize=14, fontname='serif')
plt.ylabel("y", fontsize=14, fontname='serif')
plt.tick_params(axis='both', length=10, which='major')
plt.tick_params(axis='both', length=5,  which='minor')
plt.xlim(-50, 50)
plt.ylim(-1.0,1.0)
plt.minorticks_on()
plt.plot(x, y, 'r-')

# ----- プロットファイルの作成 -----
plt.savefig('sin_exp.pdf')
plt.savefig('sin_exp.svg')

# ----- プロットの表示 -----
plt.show()

plt.close()

図4: 作成されたプロット

ページ作成情報

参考資料

  1. A note on the Object-Oriented API vs. Pyplot
  2. Usage Guide — Matplotlib 3.4.3 documentation に,Matplotlib の基本的な事項が書いてあります.
  3. 正規分布の楕円のメソッドは,Plot a confidence ellipse of a two-dimensional dataset に書かれているソースを使いました.

更新履歴

2021年10月02日 新規作成


no counter