如何使用 matplotlib 在同一行中绘制多个图形?
How can I plot multiple figure in the same line with matplotlib?
在我的 Ipython Notebook
中,我有一个脚本生成一系列多个数字,如下所示:
问题是,这些数字 take too much space
,我正在制作其中的许多组合。这让我很难在这些数字之间导航。
我想在同一行中制作一些情节。我该怎么做?
更新:
感谢 fjarri 的建议,我已经更改了代码,这适用于在同一行中绘图。
现在,我想让它们在不同的行中绘制(默认选项)。我应该怎么办?我已经尝试了一些,但不确定这是否是正确的方法。
def custom_plot1(ax = None):
if ax is None:
fig, ax = plt.subplots()
x1 = np.linspace(0.0, 5.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
ax.plot(x1, y1, 'ko-')
ax.set_xlabel('time (s)')
ax.set_ylabel('Damped oscillation')
def custom_plot2(ax = None):
if ax is None:
fig, ax = plt.subplots()
x2 = np.linspace(0.0, 2.0)
y2 = np.cos(2 * np.pi * x2)
ax.plot(x2, y2, 'r.-')
ax.set_xlabel('time (s)')
ax.set_ylabel('Undamped')
# 1. Plot in same line, this would work
fig = plt.figure(figsize = (15,8))
ax1 = fig.add_subplot(1,2,1, projection = '3d')
custom_plot1(ax1)
ax2 = fig.add_subplot(1,2,2)
custom_plot2(ax2)
# 2. Plot in different line, default option
custom_plot1()
custom_plot2()
只使用子图。
plt.plot(data1)
plt.show()
plt.subplot(1,2,1)
plt.plot(data2)
plt.subplot(1,2,2)
plt.plot(data3)
plt.show()
(这段代码不应该起作用,重要的是它背后的想法)
对于数字 2,同样的事情:使用子图:
# 1. Plot in same line, this would work
fig = plt.figure(figsize = (15,8))
ax1 = fig.add_subplot(1,2,1, projection = '3d')
custom_plot1(ax1)
ax2 = fig.add_subplot(1,2,2)
custom_plot2(ax2)
# 2. Plot in same line, on two rows
fig = plt.figure(figsize = (8,15)) # Changed the size of the figure, just aesthetic
ax1 = fig.add_subplot(2,1,1, projection = '3d') # Change the subplot arguments
custom_plot1(ax1)
ax2 = fig.add_subplot(2,1,2) # Change the subplot arguments
custom_plot2(ax2)
这不会显示两个不同的数字(这是我从 'different lines' 中了解到的),而是将两个数字放在一个数字中,一个在另一个之上。
现在,子图参数的解释:subplot(rows, cols, axnum)
rows
将是图形分为的行数。
cols
将是图形分为的列数。
axnum
将是您要策划的部门。
在你的例子中,如果你想要两个并排的图形,那么你想要一行两列 --> subplot(1,2,...)
第二种情况,如果你想要两个图形一个在另一个上面,那么你想要2行1列--> subplot(2,1,...)
对于更复杂的分布,使用 gridspec
http://matplotlib.org/users/gridspec.html
在我的 Ipython Notebook
中,我有一个脚本生成一系列多个数字,如下所示:
问题是,这些数字 take too much space
,我正在制作其中的许多组合。这让我很难在这些数字之间导航。
我想在同一行中制作一些情节。我该怎么做?
更新:
感谢 fjarri 的建议,我已经更改了代码,这适用于在同一行中绘图。
现在,我想让它们在不同的行中绘制(默认选项)。我应该怎么办?我已经尝试了一些,但不确定这是否是正确的方法。
def custom_plot1(ax = None):
if ax is None:
fig, ax = plt.subplots()
x1 = np.linspace(0.0, 5.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
ax.plot(x1, y1, 'ko-')
ax.set_xlabel('time (s)')
ax.set_ylabel('Damped oscillation')
def custom_plot2(ax = None):
if ax is None:
fig, ax = plt.subplots()
x2 = np.linspace(0.0, 2.0)
y2 = np.cos(2 * np.pi * x2)
ax.plot(x2, y2, 'r.-')
ax.set_xlabel('time (s)')
ax.set_ylabel('Undamped')
# 1. Plot in same line, this would work
fig = plt.figure(figsize = (15,8))
ax1 = fig.add_subplot(1,2,1, projection = '3d')
custom_plot1(ax1)
ax2 = fig.add_subplot(1,2,2)
custom_plot2(ax2)
# 2. Plot in different line, default option
custom_plot1()
custom_plot2()
只使用子图。
plt.plot(data1)
plt.show()
plt.subplot(1,2,1)
plt.plot(data2)
plt.subplot(1,2,2)
plt.plot(data3)
plt.show()
(这段代码不应该起作用,重要的是它背后的想法)
对于数字 2,同样的事情:使用子图:
# 1. Plot in same line, this would work
fig = plt.figure(figsize = (15,8))
ax1 = fig.add_subplot(1,2,1, projection = '3d')
custom_plot1(ax1)
ax2 = fig.add_subplot(1,2,2)
custom_plot2(ax2)
# 2. Plot in same line, on two rows
fig = plt.figure(figsize = (8,15)) # Changed the size of the figure, just aesthetic
ax1 = fig.add_subplot(2,1,1, projection = '3d') # Change the subplot arguments
custom_plot1(ax1)
ax2 = fig.add_subplot(2,1,2) # Change the subplot arguments
custom_plot2(ax2)
这不会显示两个不同的数字(这是我从 'different lines' 中了解到的),而是将两个数字放在一个数字中,一个在另一个之上。
现在,子图参数的解释:subplot(rows, cols, axnum)
rows
将是图形分为的行数。
cols
将是图形分为的列数。
axnum
将是您要策划的部门。
在你的例子中,如果你想要两个并排的图形,那么你想要一行两列 --> subplot(1,2,...)
第二种情况,如果你想要两个图形一个在另一个上面,那么你想要2行1列--> subplot(2,1,...)
对于更复杂的分布,使用 gridspec
http://matplotlib.org/users/gridspec.html