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

2024-03-28 19:10:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在pyplot中,单轴是否也可能占据多个子地块? pyplot.subplot的docstring没有提到它

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


Tags: andthe命令图形绘图plot布局will
3条回答

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

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

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

您可以简单地执行以下操作:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 7, 0.01)
    
plt.subplot(2, 1, 1)
plt.plot(x, np.sin(x))
    
plt.subplot(2, 2, 3)
plt.plot(x, np.cos(x))
    
plt.subplot(2, 2, 4)
plt.plot(x, np.sin(x)*np.cos(x))

即,第一个图实际上是上半部分的图(图仅分为2x1=2个单元格),以下两个较小的图在2x2=4单元格网格中完成。 subplot()的第三个参数是网格内绘图的位置(在英语阅读方向,单元格1位于左上角): 例如,在第二个子图(subplot(2, 2, 3))中,轴将转到2x2矩阵的第三部分,即左下角

enter image description here

相关问题 更多 >