zoukankan      html  css  js  c++  java
  • Python3 matplotlib的绘图函数subplot()简介

    Python3 matplotlib的绘图函数subplot()简介

    一、简介

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

    subplot(numRows, numCols, plotNum)
    • 图表的整个绘图区域被分成 numRows 行和 numCols 列

    • 然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1

    • plotNum 参数指定创建的 Axes 对象所在的区域

    如果 numRows = 2, numCols = 3, 那整个绘制图表样式为 2X3 的图片区域, 用坐标表示为:

    (1, 1), (1, 2), (1, 3)
    (2, 1), (2, 2), (2, 3)

    这时, 当 plotNum = 3 时, 表示的坐标为(1, 3), 即第一行第三列的子图

    • 如果 numRowsnumCols 和 plotNum 这三个数都小于 10 的话, 可以把它们缩写为一个整数, 例如 subplot(323) 和 subplot(3,2,3) 是相同的.

    • subplot在 plotNum 指定的区域中创建一个轴对象. 如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除.

    二、参数说明

    1,subplots()参数

    matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)

    创建一个画像(figure)和一组子图(subplots)。
    这个实用程序包装器可以方便地在单个调用中创建子图的公共布局,包括封闭的图形对象。

    输入参数说明:
      nrows,ncols:整型,可选参数,默认为1。表示子图网格(grid)的行数与列数。
      sharex,sharey:布尔值或者{'none','all','row','col'},默认:False
           控制x(sharex)或y(sharey)轴之间的属性共享:
              1.True或者'all':x或y轴属性将在所有子图(subplots)中共享.
              2.False或'none':每个子图的x或y轴都是独立的部分
                 3.'row':每个子图在一个x或y轴共享行(row)
                    4.'col':每个子图在一个x或y轴共享列(column)
      当子图在x轴有一个共享列时('col'),只有底部子图的x tick标记是可视的。
      同理,当子图在y轴有一个共享行时('row'),只有第一列子图的y tick标记是可视的。
      squeeze:布尔类型,可选参数,默认:True。
                    * 如果是True,额外的维度从返回的Axes(轴)对象中挤出。
                        》如果只有一个子图被构建(nrows=ncols=1),结果是单个Axes对象作为标量被返回。
                        》对于N*1或1*N个子图,返回一个1维数组。
                        》对于N*M,N>1和M>1返回一个2维数组。
                    *如果是False,不进行挤压操作:返回一个元素为Axes实例的2维数组,即使它最终是1x1。
      subplot_kw:字典类型,可选参数。把字典的关键字传递给add_subplot()来创建每个子图。
      gridspec_kw字典类型,可选参数。把字典的关键字传递给GridSpec构造函数创建子图放在网格里(grid)。
      **fig_kw:把所有详细的关键字参数传给figure()函数

    返回结果:
      fig:matplotlib.figure.Figure对象
      ax:Axes(轴)对象或Axes(轴)对象数组。

    2,figure()参数

    matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)

    创建一个新的画布(figure)。
    输入参数:
      num:整型或者字符串,可选参数,默认:None。
           如果不提供该参数,一个新的画布(figure)将被创建而且画布数量将会增加。
              如果提供该参数,带有id的画布是已经存在的,激活该画布并返回该画布的引用。
                   如果这个画布不存在,创建并返回画布实例。
                   如果num是字符串,窗口标题将被设置为该图的数字。
      figsize:整型元组,可选参数 ,默认:None。
                  每英寸的宽度和高度。如果不提供,默认值是figure.figsize。
      dpi:整型,可选参数,默认:None。每英寸像素点。如果不提供,默认是figure.dpi。
      facecolor:背景色。如果不提供,默认值:figure.facecolor。
      edgecolor:边界颜色。如果不提供,默认值:figure.edgecolor。
      framemon:布尔类型,可选参数,默认值:True。如果是False,禁止绘制画图框。
      FigureClass:源于matplotlib.figure.Figure的类。(可选)使用自定义图实例。
      clear:布尔类型,可选参数,默认值:False。如果为True和figure已经存在时,这是清理掉改图。
    返回值:
      figure:Figure。返回的Figure实例也将被传递给后端的new_figure_manager,这允许将自定义的图类挂接到pylab接口中。 

           附加的kwarg将被传递给图形init函数。

    三、示例

    1,规则划分成3*3

    代码:

    import matplotlib
    import matplotlib.pyplot as plt
     
    if __name__ == '__main__':
        for i,color in enumerate("rgby"):
            plt.subplot(221+i, facecolor=color) #背景色设置facecolor
        plt.show()

    效果:

    2,不规则划分

    不规则划分

    将整个表按照 2*2 划分 
    前两个简单, 分别是 (2, 2, 1) 和 (2, 2, 2)

    但是第三个图呢, 他占用了 (2, 2, 3) 和 (2, 2, 4)

    显示需要对其重新划分, 按照 2 * 1 划分

    前两个图占用了 (2, 1, 1) 的位置

    因此第三个图占用了 (2, 1, 2) 的位置

    代码:

    import matplotlib.pyplot as plt
    import numpy as np
    
    def f(t):
        return np.exp(-t) * np.cos(2 * np.pi * t)
     
    if __name__ == '__main__' :
        t1 = np.arange(0, 5, 0.1)
        t2 = np.arange(0, 5, 0.02)
     
        plt.figure(12)
        plt.subplot(221)
        plt.plot(t1, f(t1), 'bo', t2, f(t2), 'r--')
     
        plt.subplot(222)
        plt.plot(t2, np.cos(2 * np.pi * t2), 'r--')
     
        plt.subplot(212)
        plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
     
        plt.show()

    效果:

  • 相关阅读:
    Hadoop笔记
    InnoDB存储引擎概述--文件,表,索引,锁,事务的原理与实现
    SpringCloud-Eureka
    spring boot启动报错Error starting ApplicationContext(未能配置数据源)
    SSM框架配置
    SpringMvc笔记
    MySql笔记-->3
    MySql笔记-->2
    MySql笔记 -->1
    C# Lambda表达式
  • 原文地址:https://www.cnblogs.com/lizm166/p/9667923.html
Copyright © 2011-2022 走看看