はじめに
これまでおこなってきたようなplot関数によるグラフの描画やsubplot関数は、グラフの土台になるオブジェクトやグラフ要素のオブジェクトを内部的に生成します。そのため、オブジェクトの操作を気にすることなくグラフの描画をおこなうことができました。
pltで作成されるグラフは、Figureクラスのオブジェクトに実際のグラフを描画するAxesクラスのオブジェクトが含まれ、さらにx軸、y軸を管理するAxisが含まれます。
グラフオブジェクトの階層構造
グラフオブジェクトは次のような階層構造を持ちます。これは、Matplotlibの公式ドキュメント内に掲載にされているものです。
Figureオブジェクトを生成し、それにAxesオブジェクトを追加することで1つのFigure上に複数のグラフエリア(Axesオブジェクト)を持たせることができます。
Figure/Axesオブジェクトの生成と配置
Axesは、figureと同時に作成する方法(plt.subplots() )とfigure作成後に個別に作成していく方法(add_subplot() )があります。まず、ここではadd_subplot()で個別にAxesを作成していく方法を扱うことにします。
上記のように1行3列の形でAxesを作成するには、次のようにします。
import matplotlib.pyplot as plt
%matplotlib inline
fig=plt.figure(figsize=(12,4))
ax1=fig.add_subplot(131)
ax2=fig.add_subplot(132)
ax3=fig.add_subplot(133)
まず、グラフの土台となるFigureクラスのオブジェクトですが、これはplt.figure()で作ります。この中にAxesクラスのオブジェクト(サブプロット)を作るには、Figureオブジェクトに対してadd_subplot()メソッドを使います。subplot()の引数は位置を表す3桁の整数となります。1番目が行数、2番目が列数、3番目が位置を表す整数となります。
ここまでできたら後は簡単です。これまでは、plt.plot()のようにグラフを指定する関数に引数の設定をするのみでしたが、「どのオブジェクトに対して操作するのか」を明示的に指定する必要があります。
いま、Axeオブジェクトとして、ax1, ax2, ax3を作成したので、それぞれのオブジェクトに描画してみましょう。
# Figureオブジェクトの作成
fig=plt.figure(figsize=(12,4))
# Axeオブジェクトの作成
ax1=fig.add_subplot(131)
ax2=fig.add_subplot(132)
ax3=fig.add_subplot(133)
# 描画
x = np.linspace(-5, 5, 20)
y1=x
y2=x**3
y3=x**6
ax1.plot(x,y1)
ax2.plot(x,y2)
ax3.plot(x,y3)
まとめ
いかがでしょうか?グラフオブジェクトで操作する方法は、これまでの方法と異なりますが、ポイントは「明示的に操作対象のオブジェクトを指定する」という点です。
実は、グラフオブジェクトで操作する方法の場合は、グラフタイトルや軸タイトル、軸ラベルなどの設定方法も異なります。次回はこのあたりを扱うことにしましょう。
コメント