前回からの続きです。Matplotlibでグラフを作成する場合、FigureとAxesを明示的に作成しなければならないと書きましたが、もうひとつ、アプローチ方法があります。
Matplotlibの公式サイトでは、OO-style (オブジェクト志向スタイル) とpyplot-styleと整理されています。前回のplt.figure()もplt.subplots()も、OO-styleの書き方に該当します。
pyplot-styleでは、Figure/Axesをインスタンス化することなく、直接関数から描画してしまうという動作になります(厳密には違うかもしれませんが……)。pyplot-styleの方がコードがシンプルになる一方で、柔軟性のあるグラフ描画ができませんので、公式でも推奨している通り、一時的に簡単なチェックをしたいときに使うのがよさそうです。
名称 | 概要 | 公式の推奨 |
---|---|---|
OO-style (オブジェクト志向スタイル) | 明示的にFigure/Axesを作成し、メソッドを呼び出す | 複雑なグラフや大規模プロジェクトで再利用をする場合に利用 |
pyplot-style | pyplotで自動でFigure/Axesを作成し、pyplot関数を使用する | クイックな確認を行う場合に利用 |
散布図の設定例
実際に、OO-styleとpyplot-styleそれぞれのスタイルを用いて散布図を描いてみます。
まずは、必要ライブラリのインポートとデータの作成。これは、OO-styleとpyplot-styleのどちらの場合でもはじめに実施しておきます。
import numpy as np import matplotlib.pyplot as plt np.random.seed(0) # 0~100のランダムな整数値を生成 x = [np.random.randint(0, 100) for i in range(200)] y = [np.random.randint(0, 100) for i in range(200)]
OO-styleによるグラフの作成
FigureとAxesをインスタンス化します。
fig = plt.figure() ax = fig.add_subplot(1, 1, 1) # 以下の記述でも同義 # fig, ax = plt.subplots() ax.scatter(x, y) # ラベルの設定 ax.set_xlabel('x label') ax.set_ylabel('x label') ax.set_title('graph title (OO-style)')
pyplot-styleによるグラフの作成
Figure/Axesのインスタンス化は行いません。
また、ラベル・タイトルの設定方法はOO-styleとpyplot-styleとで少し差異があ理ますので注意が必要です。 (おそらく、OO-styleの場合は”set_”が頭につく)
plt.figure() plt.scatter(x, y) # ラベルの設定 (OO-styleとは名前が異なる) plt.xlabel('x label') plt.ylabel('y label') plt.title('graph title (pyplot-style)')