我想在单个图中有三个图。该图应具有2×2的子图布局,其中第一个图应占据前两个子图单元(即整个第一行图单元),其他图应位于单元3和4中的第一个图下方。我知道matlab允许这样使用subplot命令,如此
subplot(2,2,[1,2]) % the plot will span subplots 1 and 2
在pyplot中是否也可以让单个轴占用多个子图? pyplot.subplot的docstring没有谈论它。
任何人都有一个简单的解决方案? 提前致谢
答案 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()
另一种方式是
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()
答案 2 :(得分:11)
对于更细粒度的控制,您可能希望使用subplot2grid
的{{1}}模块。
答案 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()
答案 4 :(得分:0)