美文网首页OpenCV Vision
Matplotlib库基础-子图的绘制

Matplotlib库基础-子图的绘制

作者: 小橙子_43db | 来源:发表于2019-12-06 20:20 被阅读0次

    主要内容:Matplotlib库的绘图区域,以及3种子图的选取方式。

    1.subplot()函数

    import numpy as np

    arr = np.arange(4)

    plt.subplot(221)

    plt.plot([1,2,3,4])

    plt.subplot(224)

    plt.plot(arr*arr)

    plt.show()

    输出:

    plt.subplot(2,2,4)表示讲绘图区域分成两行两列,按照从左到右的顺序排列,选取第四块。

    横向跨区域情况

    我们在实际中会遇到一张图跨几个子图的情况,我们还是用行列来分。

    import numpy as np

    arr = np.arange(4)

    plt.subplot(221)

    plt.plot([1,2,3,4],color='r')

    plt.subplot(222)

    plt.plot(arr*arr,color='g')

    plt.subplot(212)

    plt.plot(arr*arr*arr,color='b')

    plt.show()

    输出:

    从上面的两个子图的角度看,整个图被分成两行两列,他们呢分别是1,2的位置,所以选取他们用plt.subplot(221)和plt.subplot(222),从下面的跨区域子图来看,整个图被分成了两行1列,位于下面的是2,所以选取的是plt.subplot(212)。

    纵向跨区域同样理解:

    #纵跨区域情况

    import numpy as np

    arr = np.arange(4)

    plt.subplot(221)

    plt.plot([1,2,3,4],color='r')

    plt.subplot(223)

    plt.plot(arr*arr,color='g')

    plt.subplot(122)

    plt.plot(arr*arr*arr,color='b')

    plt.show()

    输出:

    注意:subplot()函数与先创建画布fig = plt.figure() 然后使用ax = fig.add_subplot() 在画布里面添加子图是一样的效果。

    2.subplot2gird()函数

    当我们碰到更为复杂的绘图区域,使用subplot()函数会比较麻烦,这时候有一个更好用的subplot2grid()函数可以帮我们完成子图布局。

    plt.subplot2gird(GridSpec,CurSpec,colspan=1,rowspan=1)

    理念:设定网格,选中网格,确定选中的区域或数量,下标从0开始索引。

    #复杂选取布局

    plt.subplot2grid((3,3),(0,0),colspan=3)

    plt.subplot2grid((3,3),(1,0),colspan=2)

    plt.subplot2grid((3,3),(1,2),rowspan=2)

    plt.subplot2grid((3,3),(2,0))

    plt.subplot2grid((3,3),(2,1))

    输出:

    plt.subplot2grid((3,3),(0,0),colspan=3):可以(3,3)表示将整个图分成3行3列,每一个子图可以用坐标的形式选取(这里就是(0,0)),colspan和rowspan可以给定跨行或是跨列的数量默认是1。

    3.GridSpec类

    在matplotlib 中,存在一个模块gridspec。模块gridspec 是一个可以指定画布中子区位置或者说是布局的“分区”模块。在模块gridspec 中,有一个类GridSpec。类GridSpec 可以指定网格的几何形状,也就是说,可以划定一个子区的网格状的几何结构。

    #使用GridSpec类创建子图

    from matplotlib.gridspec import GridSpec

    gs = GridSpec(3,3)

    ax1 = plt.subplot(gs[0,:])

    ax2 = plt.subplot(gs[1,0:2])

    ax3 = plt.subplot(gs[1:,2])

    ax4 = plt.subplot(gs[2,0])

    ax5 = plt.subplot(gs[2,1])

    输出:

    GridSpec(3,3)可以将画图区域分成3*3的格子,我们可以将这些子区域看作3*3的二维数组,使用二维数组的切片来取子图的对应的跨行或是跨列的区域。

    相关文章

      网友评论

        本文标题:Matplotlib库基础-子图的绘制

        本文链接:https://www.haomeiwen.com/subject/xtpdgctx.html