如何使用pyplot(Python)使轴占据多个子地块

如何使用pyplot(Python)使轴占据多个子地块,python,matplotlib,Python,Matplotlib,我希望在一个图形中有三个绘图。该图形应具有二乘二的子绘图布局,其中第一个绘图应占据前两个子绘图单元格(即整个第一行绘图单元格),其他绘图应位于单元格3和4中第一个下方。我知道matlab通过使用类似这样的subplot命令来实现这一点 subplot(2,2,[1,2]) % the plot will span subplots 1 and 2 在pyplot中,单轴是否也可能占据多个子地块? pyplot.subplot的docstring没有提到它 有人有简单的解决办法吗? 提前感谢您只

我希望在一个图形中有三个绘图。该图形应具有二乘二的子绘图布局,其中第一个绘图应占据前两个子绘图单元格(即整个第一行绘图单元格),其他绘图应位于单元格3和4中第一个下方。我知道matlab通过使用类似这样的subplot命令来实现这一点

subplot(2,2,[1,2]) % the plot will span subplots 1 and 2
在pyplot中,单轴是否也可能占据多个子地块? pyplot.subplot的docstring没有提到它

有人有简单的解决办法吗? 提前感谢

您只需执行以下操作:

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()
将numpy导入为np
将matplotlib.pyplot作为plt导入
x=np.arange(0,7,0.01)
plt.子地块(2,1,1)
平面图(x,np.sin(x))
plt.子地块(2、2、3)
平面图(x,np.cos(x))
plt.子地块(2、2、4)
plt.图(x,np.sin(x)*np.cos(x))
i、 例如,第一个图实际上是上半部分的图(该图仅划分为21=2个单元格),下面两个较小的图是在22=4单元格网格中绘制的。
subplot()
的第三个参数是网格内绘图的位置: 例如,在第二个子图(
子图(2,2,3)
)中,轴将转到2*2矩阵的第三部分,即左下角


要使用一个轴占用多个子地块,只需执行以下操作:

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

另一种方法是

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

对于更细粒度的控制,您可能需要使用
matplotlib.pyplot
subplot2grid
模块

显示了使用
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()

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

  • :访问轴阵列并添加子批次
  • :控制基础地物()的几何特性
  • :将前两个封装在方便的api()中

  • 到目前为止,这些职位已经讨论了前两个选项,但他们没有提到第三个选项,这是一种更为现代的方法,并基于前两个选项。参见具体文档。

    可能重复的虽然这回答了问题中给出的具体示例,但不清楚这如何适用于非2次幂的布局。对于我的代码,我想把布局分成三部分。一个图填充右三分之二,另一个图填充左三分之一。这个答案实际上适用于常规布局(没有“2的幂”约束):
    子图(3,1,1)
    ,例如,三分之一的剪切。现在,您需要的是由工具箱来处理。@EOL,我考虑的是2/3,而不是1/3。例如,我有两个子地块,只有一列,第一个跨2/3,第二个跨1/3。这怎么可能呢?谢谢。我不太确定,但在特定的Matplotlib工具包(
    axes\u grid1
    )中似乎描述了相应的方法。非常酷,不知道这一点,我需要的正是,特别是colspan和rowspan功能。如此。令人惊叹的!非常感谢。这是必要的,如果你有例如6行。。。你想在第一行画一个图。另一个绘图跨越第2、3、4行。您不能使用通常的子地块技巧(即
    子地块(611)
    子地块(612)
    …因为子地块不知道
    span
    )。