1つの図に3つのプロットを表示したいと思います。図は2 x 2のサブプロットレイアウトである必要があります。最初のプロットは最初の2つのサブプロットセル(つまり、プロットセルの最初の行全体)を占め、他のプロットはセル3と4の最初のプロットの下に配置されます。私はMATLABがサブプロットコマンドを使用することでこれを可能にすることを知っています
subplot(2,2,[1,2]) % the plot will span subplots 1 and 2
Pyplotで、1つの軸が複数のサブプロットを占めることもできますか? pyplot.subplotのdocstringはそれについて話しません。
誰でも簡単な解決策を手に入れましたか?前もって感謝します
あなたは単に行うことができます:
_x = numpy.arange(0, 7, 0.01)
subplot(2, 1, 1)
plot(x, sin(x))
subplot(2, 2, 3)
plot(x, cos(x))
subplot(2, 2, 4)
plot(x, sin(x)*cos(x))
_
つまり、最初のプロットは実際には上半分のプロットであり(図は2 * 1 = 2セルにのみ分割されています)、次の2つの小さなプロットは2 * 2 = 4セルグリッドで行われます。 subplot()
の3番目の引数は、グリッド内のプロットの位置です。たとえば、2番目のサブプロット(subplot(2, 2, 3)
)では、軸は2 * 2の3番目のセクションに移動しますマトリックス、つまり左下隅。
軸を持つ複数のサブプロットが占めるようにするには、次のようにします。
from matplotlib import pyplot as plt
import numpy as np
b=np.linspace(-np.pi, np.pi, 100)
a1=np.sin(b)
a2=np.cos(b)
a3=a1*a2
plt.subplot(221)
plt.plot(b, a1)
plt.title('sin(x)')
plt.subplot(222)
plt.plot(b, a2)
plt.title('cos(x)')
plt.subplot(212)
plt.plot(b, a3)
plt.title('sin(x)*cos(x)')
plt.show()
別の方法は
plt.subplot(222)
plt.plot(b, a1)
plt.title('sin(x)')
plt.subplot(224)
plt.plot(b, a2)
plt.title('cos(x)')
plt.subplot(121)
plt.plot(b, a3)
plt.title('sin(x)*cos(x)')
plt.show()
よりきめ細かい制御には、subplot2grid
のmatplotlib.pyplot
モジュールを使用することをお勧めします。
Gridspecを使用して複数列/行のサブプロットレイアウトを作成する は、GridSpec
を使用してこれを行う方法を示しています。 3つのサブプロットを持つ例の簡略化されたバージョンは次のようになります。
import matplotlib.pyplot as plt
fig = plt.figure()
gs = fig.add_gridspec(2,2)
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, :])
plt.show()
Matplotlibには、Figure内で個別のプロットを作成するための3つの主なオプションがあります。
subplot
:Axes配列にアクセスし、サブプロットを追加しますgridspec
:基礎となる図形の幾何学的プロパティを制御します( デモ )subplots
:最初の2つを便利なAPIでラップします( デモ )これまでの投稿では、最初の2つのオプションを取り上げましたが、3番目のオプションについては触れていません。これは、より近代的なアプローチであり、最初の2つのオプションに基づいています。特定のドキュメント (Combining two subplots using subplots and GridSpec を参照してください。