web-dev-qa-db-ja.com

Axesがpyplot(Python)で複数のサブプロットを占めるようにする方法

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はそれについて話しません。

誰でも簡単な解決策を手に入れましたか?前もって感謝します

38
Sven

あなたは単に行うことができます:

_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番目のセクションに移動しますマトリックス、つまり左下隅。

46
Eric O Lebigot

軸を持つ複数のサブプロットが占めるようにするには、次のようにします。

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()

enter image description here

別の方法は

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()

enter image description here

34
Hooshmand zandi

よりきめ細かい制御には、subplot2gridmatplotlib.pyplotモジュールを使用することをお勧めします。

http://matplotlib.org/users/gridspec.html

12
A.Wan

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()

enter image description here

Matplotlibには、Figure内で個別のプロットを作成するための3つの主なオプションがあります。

  1. subplot :Axes配列にアクセスし、サブプロットを追加します
  2. gridspec :基礎となる図形の幾何学的プロパティを制御します( デモ
  3. subplots :最初の2つを便利なAPIでラップします( デモ

これまでの投稿では、最初の2つのオプションを取り上げましたが、3番目のオプションについては触れていません。これは、より近代的なアプローチであり、最初の2つのオプションに基づいています。特定のドキュメント Combining two subplots using subplots and GridSpec を参照してください。

0
pylang