matplotlibでグラフ化する (4/6)
作成:2018-02-10 11:01
更新:2018-02-10 11:01
更新:2018-02-10 11:01
■複数グラフの描画
matplotlibでは、plotを呼び出せば複数のグラフを描くことができます。これは前回のサンプルでもやりましたね。
が、plotを複数回呼び出すやり方は、1つのプロット(グラフのエリアです)の中に複数のグラフを描く、というものです。つまり、グラフを描くプロットそのものは1つなのです。複数のプロットを並べて描くようなことはできないのでしょうか。
実は、できます。これには、「サブプロット(subplots)」というものを使います。これは、matplotlibでグラフが描画されるエリア内を複数のエリアに分割したものです。
変数Aには、フィギュアと呼ばれるオブジェクトが入ります。これはグラフの縦軸や横軸、タイトルなど、グラフを描くベースとなる表示を管理するものです。
そして変数Bには、分割されたそれぞれのサブプロットのオブジェクトが入ります。これは変数1つだけを用意するだけでなく、タプルを使って分割した1つ1つのサブプロットが1つ1つの変数に収まるようにすることもできます。例えば、こんな具合です。
下のリスト欄に簡単な例を挙げておきましょう。これは2×2のグラフを表示するものです。subplotsで4つのサブプロットを変数ax1, ax2, ax3, ax4にそれぞれ取り出し、これらのplotを呼び出してグラフを描画しています。またlegendで凡例も作成していますね。subplotsで取得したオブジェクトは、こんな具合にmatplotlib本体と同様にメソッドを呼び出しグラフを描いていくことができるのです。
が、plotを複数回呼び出すやり方は、1つのプロット(グラフのエリアです)の中に複数のグラフを描く、というものです。つまり、グラフを描くプロットそのものは1つなのです。複数のプロットを並べて描くようなことはできないのでしょうか。
実は、できます。これには、「サブプロット(subplots)」というものを使います。これは、matplotlibでグラフが描画されるエリア内を複数のエリアに分割したものです。
変数A , 変数B =《matplotlib》.subplots( 縦 , 横 )subplotsが、プロットのエリアを複数の小さなプロットに分割したものを作成するメソッドです。引数には縦横の分割数を指定します。
変数Aには、フィギュアと呼ばれるオブジェクトが入ります。これはグラフの縦軸や横軸、タイトルなど、グラフを描くベースとなる表示を管理するものです。
そして変数Bには、分割されたそれぞれのサブプロットのオブジェクトが入ります。これは変数1つだけを用意するだけでなく、タプルを使って分割した1つ1つのサブプロットが1つ1つの変数に収まるようにすることもできます。例えば、こんな具合です。
fig, ((a1, a2), (b1, b2)) = pyplot.subplots(2, 2)これで、2×2で分割された各サブプロットが、((a1, a2), (b1, b2))の各変数に代入されます。後は、これらの変数を使ってグラフを描画すればいいわけです。
下のリスト欄に簡単な例を挙げておきましょう。これは2×2のグラフを表示するものです。subplotsで4つのサブプロットを変数ax1, ax2, ax3, ax4にそれぞれ取り出し、これらのplotを呼び出してグラフを描画しています。またlegendで凡例も作成していますね。subplotsで取得したオブジェクトは、こんな具合にmatplotlib本体と同様にメソッドを呼び出しグラフを描いていくことができるのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
import numpy as np import matplotlib.pyplot as plt fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) m = np.array(range(-10,10)) n1 = m n2 = m**2 n3 = m * -1 n4 = m**2 * -1 plt.title("Sample Graph") ax1.plot(m, n1, label='y=x') ax1.legend() ax2.plot(m, n2, label='y=x**2') ax2.legend() ax3.plot(m, n3, label='y=x * -1') ax3.legend() ax4.plot(m, n4, label='y=x**2 * -1') ax4.legend() plt.show()
※関連コンテンツ