Matplotlib-マルチプロット

この章では、同じキャンバス上に複数のサブプロットを作成する方法を学習します。

ザ・ subplot()関数は、指定されたグリッド位置にあるAxesオブジェクトを返します。この関数の呼び出しシグネチャは-です。

plt.subplot(subplot(nrows, ncols, index)

現在の図では、関数はncolsaxesによるnrowsのグリッドの位置インデックスにAxesオブジェクトを作成して返します。インデックスは1からnrows * ncolsになり、行優先順に増分します。nrows、ncols、およびindexがすべて10未満の場合、インデックスは1つ、連結された3桁の数値として指定することもできます。

たとえば、subplot(2、3、3)とsubplot(233)はどちらも、現在の図の右上隅に軸を作成し、図の高さの半分と図の幅の3分の1を占めます。

サブプロットを作成すると、境界を共有することを超えて、サブプロットと重複する既存のサブプロットが削除されます。

import matplotlib.pyplot as plt
# plot a line, implicitly creating a subplot(111)
plt.plot([1,2,3])
# now create a subplot which represents the top plot of a grid with 2 rows and 1 column.
#Since this subplot will overlap the first, the plot (and its axes) previously 
created, will be removed
plt.subplot(211)
plt.plot(range(12))
plt.subplot(212, facecolor='y') # creates 2nd subplot with yellow background
plt.plot(range(12))

上記のコード行は、次の出力を生成します-

figureクラスのadd_subplot()関数は、既存のプロットを上書きしません-

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot([1,2,3])
ax2 = fig.add_subplot(221, facecolor='y')
ax2.plot([1,2,3])

上記のコード行を実行すると、次の出力が生成されます。

同じFigureキャンバスに別のAxesオブジェクトを追加することにより、同じFigureに挿入プロットを追加できます。

import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
fig=plt.figure()
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
axes2 = fig.add_axes([0.55, 0.55, 0.3, 0.3]) # inset axes
y = np.sin(x)
axes1.plot(x, y, 'b')
axes2.plot(x,np.cos(x),'r')
axes1.set_title('sine')
axes2.set_title("cosine")
plt.show()

上記のコード行を実行すると、次の出力が生成されます-