如何使用Python并排绘制两个图?


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

我的问题是:为了使地块并排,我需要更改什么?

Answers:


148

将子图设置更改为:

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

的参数subplot是:行数,列数以及当前使用的子图。因此1, 2, 1表示“ 1行2列图形:转到第一个子图”。然后1, 2, 2表示“ 1行2列图形:转到第二个子图”。

当前,您正在要求2行1列(即一个在另一个之上)的布局。您需要改用1行2列的布局。当您这样做时,结果将是:

并排图

为了最大程度地减少子图的重叠,您可能需要加入:

plt.tight_layout()

演出前。屈服:

并排整齐图


45

签出此页面:http : //matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplots类似。我认为这会更好,因为设置图形的参数会更容易。前两个参数定义布局(在您的情况下为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'17

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.savefigplt.show?如果是这样,那很可能是您的问题。
busybear
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.