我想在单个图中有三个图 . 该图应具有2×2的子图布局,其中第一个图应占据前两个子图单元(即整个第一行图单元),其他图应位于单元3和4中的第一个图下方 . 我知道matlab允许这样使用subplot命令
subplot(2,2,[1,2]) % the plot will span subplots 1 and 2
在pyplot中是否也可以让单个轴占用多个子图? pyplot.subplot的docstring没有谈论它 .
谁有一个简单的解决方案?提前致谢
你可以简单地做:
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矩阵的第三部分,即左下角 .
subplot()
subplot(2, 2, 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()
另一种方式是
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 模块 .
matplotlib.pyplot
subplot2grid
http://matplotlib.org/users/gridspec.html
3 回答
你可以简单地做:
即,第一个图实际上是上半部分的图(该图仅被分成2 * 1 = 2个单元),并且以下两个较小的图在2 * 2 = 4个单元网格中完成 .
subplot()
的第三个参数是网格内部图的位置:例如,在第二个子图(subplot(2, 2, 3)
)中,轴将转到2 * 2矩阵的第三部分,即左下角 .要使多个子图占据轴,您可以简单地执行:
另一种方式是
对于更细粒度的控制,您可能希望使用
matplotlib.pyplot
的subplot2grid
模块 .http://matplotlib.org/users/gridspec.html