matplotlib子区划分函数(按顺序):subplot()、subplots()、subplot2grid()、GridSpec()、axes()、add_axes()、add_subplot()

Python----matplotlib子区(子图)划分函数(7类)

在查阅书本和有关资料后,我对matplotlib子区划分函数做了以下总结,例子是自己举的,如果发现有差漏的地方后续会进行修改。


①subplot():绘制几何形状相同的子区布局.

语法:

  • plt.subplot(rows,cols,plotNum)

    括号里的数值依次表示行数、列数、第几个。

使用

  • plt.subplot(2,2,1)

  • plt.subplot(221)

    如(221)表示划分为2行2列,取其第一个。子区编号从左上角为1开始,序号依次向右递增。
    在这里插入图片描述


②subplots():创建一张画布且带有多个子区.

语法:

  • plt.subplots(rows,cols)

    括号里的数值表示行数、列数。

使用:

  • fig,ax = plt.subplots(1,2)
    ax[0].plot([1,2],[1,3])
    ax[1].plot([1,2],[1,3])
    在这里插入图片描述
  • fig = plt.figure(figsize=(6,6))
    ax = fig.subplots(1,2)
    ax[0].plot([1,2],[1,3])
    ax[1].plot([1,2],[1,3])

subplots()函数的返回值是一个画布对象fig和一个或多个坐标轴实例对象axis(简写为ax)。当坐标轴实例对象为一个时,其返回值为元组(fig,ax);当坐标轴实例对象为多个时,其返回值为(fig,[ax1,ax2,…]),如

  • fig,ax = plt.subplots(2,2)
    ax[0,1].plot([1,2],[1,3])

③subplot2grid():合并子区布局.

语法:

  • plt.subplot2grid( (rows,cols),(rowNum,colNum),colspan=value,rowspan=value )

    括号里的值依次表示(行数,列数),(行号,列号),属性(rowspan或)colspan表示(行)列合并,value指需要合并的(行)列数。

使用:

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

    (3,2)表示划分为3行2列,(0,1)表示取第0行第1列的子区,rowspan=2表示合并当前子区与其下方一行对应的子区(colspan则是与右方列合并)。

在这里插入图片描述

当其下方没有行可合并时,rowspan语句失效,如

ax1 = plt.subplot2grid((2,2),(0,0),rowspan=2)
ax2 = plt.subplot2grid((2,2),(1,1),rowspan=2)
ax1.plot([3,2],[1,2])
ax2.plot([3,2],[1,2])#ax2合并失效

在这里插入图片描述


④GridSpec():指定子区位置布局.

GridSpec()是matplotlib库里gridspec模块下的一个类。

语法:

  • import matplotlib.gridspec as gs
    gs = gs.GridSpec(rows,cols)
    ax3 = plt.subplot(gs[rowsNum,colsNum])

    (rows,cols)表示(行数,列数);
    [rowsNum,colsNum]表示 [行号,列号]。

使用:

  • import matplotlib.gridspec as gs
    gs = gs.GridSpec(4,4)
    ax1 = plt.subplot(gs[1:3,1])
    ax2 = plt.subplot(gs[0,3])
    ax3 = plt.subplot(gs[0,:3])
    ax4 = plt.subplot(gs[3,0:])

    ****注意:在冒号后的是开区间,如0:3指0、1、2。

在这里插入图片描述
在这里插入图片描述

GridSpec()可以说是在subplot2grid() 的基础上简化了重复书写行列数,并更灵活地运用索引去进行合并,使得子区的布局更简便。


⑤axes():在画布中的任意位置添加坐标轴.

添加坐标轴的方法类似是添加了新的子区,但实际上子区需要通过划分产生。

语法:

  • plt.axes( [left,bottom,width,height], frameon=True, facecolor=“r” )

    [left,bottom,width,height]依次表示添加的坐标轴的(left)左侧边缘和(bottom)底部边缘距离画布边缘的位置,(width)坐标轴的宽度和(height)坐标轴的高度;

    frameon表示是否绘制坐标轴的四条轴脊;

    facecolor表示填充坐标轴的背景色。

使用:

  • fig = plt.figure(figsize=(5,6),facecolor="#9B9B9B") #背景灰色
    fig.subplots(2,2) #为了更好地看出axes的效果,这里设置了子区
    plt.axes( [0.4,0.4,0.3,0.3], frameon=True, facecolor="#6BBBEC" )
    在这里插入图片描述
    使用axes()可以在画布的任意位置添加坐标轴,但是需要注意其坐标轴的长宽比会受画布长宽比的影响
    如本例中设置的(默认的画布大小也是长比宽大一点)画布长宽比是5:6,给axes()设置的长宽为0.3和0.3,其显示出来的并不是正方形而是长方形;若想让axes()显示为正方形,只需要设置画布为正方形或者将axes()的宽度相应增大。

⑥ add_axes()和add_subplot():需用画布实例调用.

add_axes()和add_subplot()的本质语义与axes()和subplot()的语义是一样的,都是添加坐标轴和添加子区,但是多了add后,它们在调用时就产生了一点差别。

  • add_axes()

    使用:

     fig = plt.figure(figsize=(4,4),facecolor="#9B9B9B") #背景灰色
     fig.subplots(1,2) ##为了更好地看效果,这里设置了子区
     
     plt.axes([1,1,0.3,0.3],facecolor="black")`
    

    fig.add_axes( [0,0, 0.3,0.3], facecolor="red" )
    在这里插入图片描述
    调换 axes()和add_axes()的位置

    fig.add_axes([1,1,0.3,0.3],facecolor="black") 		
    

    plt.axes([0,0,0.3,0.3], facecolor="red" )

    无论是用add_axes还是axes()来添加新坐标轴,它们的执行结果都是一样的。只是add_axes()需要用画布实例fig去调用,不能直接用plt调用。
    在这里插入图片描述


  • add_subplot()

    使用:

    fig = plt.figure(figsize=(4,4),facecolor="#9B9B9B")
    plt.subplot(2,1,1)
    

    fig.add_subplot(1,3,3,facecolor="#6BBBEC")
    在这里插入图片描述
    add_subplot()同样需要用画布实例fig去调用,不能直接用plt调用,但是add_subplot()与subplot()相比,在显示结果上明显多了add的功能,因为同时调用两个plt.subplot()是不能增加新子区的(只是后面的plt.subplot()覆盖了前面的),但是通过add_subplot()就可以添加新子区。

  • 总的来说,我在运用add_axes()和add_subplot()时觉得比较方便的地方是可以使用fig实例去调用,这样当存在两个或两个以上的画布时,通过fig1,fig2,…去调用就比较清晰。


Logo

鸿蒙生态一站式服务平台。

更多推荐