如何使用pyplot(Python)使轴占用多个子图

时间:2010-02-15 10:42:15

标签: python matplotlib

我想在单个图中有三个图。该图应具有2×2的子图布局,其中第一个图应占据前两个子图单元(即整个第一行图单元),其他图应位于单元3和4中的第一个图下方。我知道matlab允许这样使用subplot命令,如此

subplot(2,2,[1,2]) % the plot will span subplots 1 and 2

在pyplot中是否也可以让单个轴占用多个子图? pyplot.subplot的docstring没有谈论它。

任何人都有一个简单的解决方案? 提前致谢

5 个答案:

答案 0 :(得分:43)

您可以这样做:

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 = 4个单元网格中完成的。 subplot()的第三个参数是网格内图的位置: 例如,在第二个子图(subplot(2, 2, 3))中,轴将到达2 * 2矩阵的第三部分,即左下角。

答案 1 :(得分:30)

要使多个子图占据轴,您只需执行以下操作:

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

答案 2 :(得分:11)

对于更细粒度的控制,您可能希望使用subplot2grid的{​​{1}}模块。

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

答案 3 :(得分:1)

Using Gridspec to make multi-column/row subplot layouts显示了使用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

答案 4 :(得分:0)

matplotlib中有三个主要选项可用于在图形中绘制单独的图:

  1. subplot:访问axes数组并添加子图
  2. gridspec:控制基础图形(demo)的几何属性
  3. subplots:将前两个文件包装在方便的api(demo

到目前为止,这些帖子已经讨论了前两个选项,但是他们没有提到第三个选项,这是一种更现代的方法,它基于前两个选项。请参阅特定文档Combining two subplots using subplots and GridSpec