首页 文章

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

提问于
浏览
27

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

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

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

谁有一个简单的解决方案?提前致谢

3 回答

  • 26

    你可以简单地做:

    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矩阵的第三部分,即左下角 .

  • 8

    要使多个子图占据轴,您可以简单地执行:

    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

  • 37

    对于更细粒度的控制,您可能希望使用 matplotlib.pyplotsubplot2grid 模块 .

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

相关问题