opencv基础知识

如何理解subplot绘制不规则子图的参数设置

版权声明:本文为博主原创文章,转载请注明出处;如果博客中有错误之处抑或有可以改进的地方,欢迎在评论区留言。 https://blog.csdn.net/f156207495/article/details/81194184

在matplotlib下,一个Figure对象可以包含多个子图(Axes),可以使用subplot()快速绘制,其调用形式如下

subplot(numRows, numCols, plotNum)
  • 图表的整个绘图区域被分成numRows行和numCols列
  • 然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1
  • plotNum 参数指定创建的 Axes 对象所在的区域

规则划分

先看一种2*2的规则划分:

  1.  
    import matplotlib
  2.  
    import matplotlib.pyplot as plt
  3.  
     
  4.  
    if __name__ == '__main__':
  5.  
    for i,color in enumerate("rgby"):
  6.  
    plt.subplot(221+i, axisbg=color)
  7.  
     
  8.  
    plt.show()

plt.subplot(221+i)等价于plt.subplot(221);plt.subplot(222);plt.subplot(223);plt.subplot(224)

结果如下:

3*3

这个很好理解。首先将figure分成2行2列,一共有4个子图,红色的子图标号为1,绿色的子图标号为2,蓝色的子图标号为3,黄色的子图标号为4。

不规则划分

那么再来看看两个不规则的示例:

1.

  1.  
    import numpy as np
  2.  
    import matplotlib.pyplot as plt
  3.  
    # 分成2x2,占用第一个,即第一行第一列的子图
  4.  
    plt.subplot(221)
  5.  
    # 分成2x2,占用第二个,即第一行第二列的子图
  6.  
    plt.subplot(222)
  7.  
    # 分成2x1,占用第二个,即第二行
  8.  
    plt.subplot(212)
  9.  
    plt.show()

结果如下:

不规则的

2. 

  1.  
    import numpy as np
  2.  
    import matplotlib.pyplot as plt
  3.  
     
  4.  
    plt.subplot(211)
  5.  
     
  6.  
    plt.subplot(234)
  7.  
     
  8.  
    plt.subplot(235)
  9.  
    plt.subplot(236)
  10.  
    plt.show()

结果如下:

不规则的

 

如何理解这些不规则的划分呢???

以第二个不规则子图的绘制作为示例来讲解:

plt.subplot(211)

该语句表示将整个figure分成2行列,该子图占据第一列,因为总共才一列,也就是一整行。

plt.subplot(234)

这个语句将整个figure分成2行3列,但是前面不是已经分成两行一列了吗,这里怎么又说分成两行三列呢??看一下第三个参数就能明白了,第三个参数值为4,表示在第4个区域,那么这句就可以解释为,不管前面是将figure怎么分的,我们现在重新将整个figure分成两行三列,该子图占据第四个位置,第四个位置也就是第二行第一列了。由于重新将figure分成两行三列,那么第一行的子图就占据3列了。正好3+1=4。

plt.subplot(235)

该子图位于第二行第二列,3+2=5。

plt.subplot(236)

该子图位于第二行第三列,3+3=6。

posted @ 2018-11-29 13:01  羽芊曦珖  阅读(317)  评论(0编辑  收藏  举报