図作成時のFigure,Axesインスタンス生成についての整理 †はじめに †図作成の事前作業にあたる Figure・Axes インスタンス生成について,いくつかの方法が見られたので整理する. import numpy as np import matplotlib.pyplot as plt 以下のことを頭に入れておくことで,理解がスムーズになると思う.
なお,1つのウィンドウに1つの図しか配置しない場合においても,ここでは subplot を使用して図を作成することとしている. fig, ax = plt.subplots() 方式 †Figure と Axes のインスタンスを同時に生成. fig, ax = plt.subplots(1,1) ax.plot(np.random.rand(100)) subplots の中の数字は row, col で,他の方法でやっているように, fig, (ax1, ax2) = plt.subplots(2,1) ax1.plot(np.random.rand(100)) fig, ax = plt.subplots(2,1) ax[0].plot(np.random.rand(100)) % 2行2列の場合はax[0][0].plot()等となる のように,個別に Axes を割り当てる方法と, Axes の集合を配列に格納する方法がある. plt.subplot() 方式 †subplots と紛らわしいが,だいぶ違う.最も MATLAB に近い方法に見える. plt.figure() plt.subplot(211) # カレントの Figure オブジェクトを対象 plt.plot(np.random.rand(100)) # カレントの Axes オブジェクトについて plot の実行 plt.subplot(212) plt.plot(np.random.rand(100)) 最初の plt.figure() は書かなくても良い.figure がひとつもなければ作成する.この点が MATLAB と同じ考え方. fig = plt.figure() → ax = fig.add_subplot() 方式 †オブジェクト指向に沿った方法その2. fig = plt.figure() ax1 = fig.add_subplot(211) # figのメソッドを使用 ax1.plot(np.random.rand(100)) # axのメソッドを使用 ax2 = fig.add_subplot(212) ax2.plot(np.random.rand(100)) plt.subplots() と異なり,Axes のインスタンスを1つずつ生成する.また,fig.subplot() なので fig = plt.figure() は必須. # 上記と同じ fig = plt.figure() ax1 = fig.add_subplot(211) ax2 = fig.add_subplot(212) ax1.plot(np.random.rand(100)) ax2.plot(np.random.rand(100)) その他 †他にも,plt.subplot() から Axes インスタンスを生成してそのメソッドを使う方法もあるが,2つの手法が混ざっているよう. # 非推奨なやり方 fig = plt.figure() ax = plt.subplot(111) # カレントの Figure オブジェクトから Axes インスタンスの生成 ax.plot(np.random.rand(100)) # ax のメソッドを使用 また,下記のように fig, ax を取得することもできる. fig = plt.gcf() ax = plt.gca() ただし gcf や gca を使用する時点で,その前に取得すべき箇所があったはずで,原則的にはこれらを使用しないコードの方がスマートである. 参考 † |