Pythonを使用して2つのプロットを並べて作成するにはどうすればよいですか?


94

matplotlibで次の例を見つけました:

import numpy as np
import matplotlib.pyplot as plt


x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'ko-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')


plt.subplot(2, 1, 2)
plt.plot(x2, y2, 'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')

plt.show()

私の質問は、プロットを並べて表示するには、何を変更する必要があるのか​​ということです。

回答:


148

サブプロット設定を次のように変更します。

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

のパラメータはsubplot、行数、列数、および現在使用しているサブプロットです。つまり1, 2, 1、「1行2列の図:最初のサブプロットに移動する」という意味です。次に1, 2, 2、「1行2列の図:2番目のサブプロットに移動する」という意味です。

現在、2行1列(つまり、上下に並べて表示)のレイアウトを要求しています。代わりに、1行2列のレイアウトを要求する必要があります。これを行うと、結果は次のようになります。

並べてプロット

サブプロットの重なりを最小限に抑えるために、次のことを開始することをお勧めします。

plt.tight_layout()

ショーの前に。降伏:

きちんとした並べてプロット


45

このページをチェックしてください:http//matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplots似ている。フィギュアのパラメータを設定しやすいので良いと思います。最初の2つの引数はレイアウト(この場合は1行2列)を定義し、他のパラメーターは図のサイズなどの機能を変更します。

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 3))
axes[0].plot(x1, y1)
axes[1].plot(x2, y2)
fig.tight_layout()

ここに画像の説明を入力してください


1
プロットをより広く、より高くする方法もありますか?
Heißenberg93

私は称賛plt.xlim / YLimプロパティを意味してはいけない
Heißenberg93

5
を使用することをお勧めしplt.subplotsます。引数figsizeを指定して、図のサイズを定義できます。のようにplt.subplots(1, 2, figsize=(20, 4))。それ以外の場合は、最初に図と図のサイズを定義できますplt.figure(figsize=(20, 4))
busybear

何らかの理由で、サブプロット「plt.savefig( '.... png')」を保存しようとすると、空白のデータが表示されます。最初にまったく同じコードを挿入します(plt.figure(figsize =(7、3))のみを追加しました)。
Heißenberg93

あなたはplt.savefig後に電話していplt.showますか?もしそうなら、それはおそらくあなたの問題です。
busybear
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.