云计算百科
云计算领域专业知识百科平台

小杰python高级(four day)——matplotlib库

1.绘制子图的方式

  • pyplot中函数subplot
  • Figure类中的函数add_subplot
  • pyplot中函数subplots
  • fig, ax = plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False,
    squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
    功能:绘制多个子图,可以一次生成多个
    参数:nrows和ncols:整数,表示子图的行数和列数。
    sharex和sharey:布尔值或字符串,表示是否共享x轴或y轴的属性。 可选值有TrueFalse'row''col'
    squeeze:布尔值,默认为True。当子图只有一个时,返回一个Axes对象
    而不是一个数组。
    False时返回一个二维数组
    width_ratios:列宽比例的序列,用于调整各列的宽度比
    height_ratios:行高比例的序列,用于调整各行的高度比
    subplot_kw:字典类型,可选参数。把字典的关键字传递给add_subplot()
    来创建每个子图。
    gridspec_kw:字典类型,可选参数。把字典的关键字传递给GridSpec构造函数
    创建子图放在网格里(grid)。

    **fig_kw:把所有详细的关键字参数传给figure()函数。
    返回值:fig:这是整个图形的对象,可以对其进行全局设置,如标题、大小等。
    axes:这是一个数组,包含所有的子图。数组的形状由nrows和ncols决定。
    例如,如果 nrows
    =2 和 ncols=3,则 axes 将是一个 2×3 的数组,每个元素都是一个
    子图对象。

    # 绘制子图,返回值包含Figure对象和Axes对象,Axes对象是一个数组,可以通过下标进行访问子图
    fig, ax = plt.subplots(2, 2)

    ax[0, 0].plot([2,3], [4,5])
    ax[0, 1].plot([1,1], [2,1])

    fig.suptitle('sub')

    plt.show()

    2.pyplot中常用函数

    gcf

    功能:获取当前窗口Figure对象如果没有活动的图形,这个函数将创建一个新的图形,并将其作为当前活动的图形。通过此函数获取了当前图形的Figure对象后,可以调用Figure类中的相关操作

    gca

    功能:获取获取当前图形中的Axes对象

    x = np.arange(0, 2*np.pi, 0.1)
    y = np.sin(x)
    plt.plot(x, y, label='sin')
    # 获取Figure对象
    fig = plt.gcf()
    fig.suptitle('sin')
    # 获取Axes对象
    ax = plt.gca()
    ax.set_xlabel('x')

    plt.show()

    savefig

    matplotlib.pyplot 模块中的 savefig 函数用于将当前图形保存到文件中。

    plt.savefig(*args, **kwargs)

    参数:

            fname:字符串或类似文件的对象,指定保存文件的路径或文件名。可以是相对路径或绝对路径。如果文件扩展名缺失,将使用默认格式(通常是 PNG)。

            dpi:可选,指定保存图像的dpi(每英寸点数)。默认值是figure.dpi。

            format:可选,指定文件格式(如 'png', 'pdf', 'svg', 'ps', 'eps', …)。如果省略,将使用文件扩展名推断格式。

            bbox_inches:可选,指定裁剪框,可以是 'tight''standard' 或一个 Bbox 对象。默认为 'standard'

                    tight:保存的图形文件中不会有不必要的空白边缘,使得图形更加紧凑和整洁

            pad_inches:可选,指定边框填充量(以英寸为单位)。默认为 0.1。

            facecolor:可选,指定图像的背景颜色。默认为 'w'(白色)。

            edgecolor:可选,指定图像边框的颜色。默认为 'w'(白色)。

            orientation:可选,指定页面方向('portrait''landscape'),仅对保存为 PDF 文件时有效。

            papertype:可选,指定纸张类型(如 'a4', 'letter'),仅对保存为 PDF 文件时有效。

            format_kwargs:可选,其他与格式相关的关键字参数。

            metadata:可选,指定要写入文件的元数据。

            pil_kwargs 和 pdf_kwargs:可选,特定于 PIL 或 PDF 格式的参数。

    x = np.arange(0, 2*np.pi, 0.1)
    y = np.sin(x)
    plt.plot(x, y, label='sin')

    y = np.cos(x)
    plt.plot(x, y, label='cos')
    # 隐藏坐标轴
    plt.axis('off')
    # 保存图片
    plt.savefig('./sin.png')

    imsave

    用于将图像数据保存到磁盘上的函数

    matplotlib.pyplot.imsave(fname, arr, **kwargs)

    参数:fname:保存图像的文件名,可以是相对路径或绝对路径。

            arr:表示图像的NumPy数组。

            kwargs:可选参数,用于指定保存的图像格式以及图像质量等参数。

    imsave和savefig区别

            savefig可以绘制图像保存文件包含坐标标题图例

            imsave是二维或三维数据保存图像文件不含坐标没法直接保存plot等绘制图像

    arr = np.array([[1,2,3,1], [2,3,1,2]])
    # 绘制二维或三维数据图像,通过cmap进行颜色映射
    plt.imshow(arr, cmap='gray')
    plt.imsave('./test.png', arr)
    plt.show()

    imshow

            imshow() 函数是 Matplotlib.pyplot 库中的一个函数,它常用于绘制二维的灰度图像或彩色图像,也可以用于绘制矩阵、热力图、地图等。

    imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, *, data=None, **kwargs)

    参数:X:图像数据。这通常是一个二维数组(灰度图像)或一个三维数组(彩色图像,其中第三维是颜色通道)。对于二维数组,可以使用 cmap 参数来指定颜色映射

            cmap:颜色映射。用于控制图像中不同数值所对应的颜色。默认颜色是'viridis',也可以设置其他颜色,如`gray`、`hot`、`jet`、'binary'

            norm:用于将数据值标准化到 [0, 1] 区间。以便与颜色映射一起使用。如果为 None,则数据将直接用于颜色映射。

            aspect:控制图像宽高比,'auto'(默认,根据数据形状自动调整)、'equal'(使像素为正方形)或数字(指定宽高比)

            interpolation:插值方法。用于控制图像的平滑程度和细节程度。可以选择`nearest`、`bilinear`、`bicubic`等插值方法。

            alpha:图像透明度。取值范围为0~1

            origin:坐标轴原点的位置。可以设置为`upper`或`lower`。

            extent:控制显示的数据范围。可以设置为`[xmin, xmax, ymin, ymax]`。

            vmin、vmax:控制颜色映射的值域范围。

           filternorm 和 filterrad:用于图像滤波的对象。可以设置为`None`、`antigrain`、`freetype`等。

            imlim: 用于指定图像显示范围。

            resample:用于指定图像重采样方式。

            url:用于指定图像链接。

    plt.colorbar()

    功能:显示颜色柱

    imread

            imread() 方法是 Matplotlib 库中的一个函数,用于从图像文件中读取图像数据。

    imread() 方法返回一个 numpy.ndarray 对象,其形状是 (nrows, ncols, nchannels),表示读取的图像的行数、列数和通道数:

  • 如果图像是灰度图像,则 nchannels 为 1。
  • 如果是彩色图像,则 nchannels 为 3 或 4,分别表示红、绿、蓝三个颜色通道和一个 alpha 通道;为3时表示红绿蓝,为4时表示红绿蓝、透明度。
  • matplotlib.pyplot.imread(fname, format=None)

    参数:fname:指定了要读取的图像文件的文件名或文件路径,可以是相对路径或绝对路径。

            format:参数指定了图像文件的格式,如果不指定,则默认根据文件后缀名来自动识别格式。

    返回值:numpy.ndarray 对象

    arr = plt.imread('map.png')
    plt.imshow(arr)
    plt.show()

    close

    plt.close(fig=None)

    功能:该函数用于关闭一个或多个打开的图形窗口,释放资源

    参数:fig:指定要关闭的图形,可以是Figure对象,也可以是图形对应的整数

            all:关闭所有图形,如果参数省略,关闭当前图像

    Line2D  类函数

            plt.plot函数的返回值表示包含一个或多个 Line2D 对象(有多条线时会返回多个Line2D对象)

            Line2D 是 Matplotlib 中用于表示二维线条的类。通过返回 Line2D 对象,你可以访问和修改线条的各种属性,例如颜色、线型、标签等。这使得 plt.plot() 不仅仅是绘制图形,还可以让你对绘制的线条进行进一步的定制。

    get_label

            该方法用于获取图像标签(参数中指定的label值)。这个方法通常用于获取已经设置好的标签,以便于后续的检查或修改.

    set_data

            该函数功能为用于动态更新线条的 x 和 y 数据。主要在需要实时更新图形(例如动画)的场景中。

    Line2D.set_data(xdata, ydata)

            调用该方法后,图形会根据新的数据重新绘制。它不会自动刷新图形,但可以与 plt.draw() 或 plt.pause() 等方法结合使用,以实现动态更新的效果。

    pause

    用于在绘图时暂停程序执行,并在指定的时间间隔后继续执行。它常用于动态更新图形或创建简单的动画效果。

    函数的作用:

    • 暂停程序:plt.pause(interval) 会暂停程序的执行,暂停的时间由参数 interval(单位为秒)决定。
    • 刷新图形窗口:在暂停期间,plt.pause() 会强制刷新图形窗口,显示最新的图形内容。这使得它特别适合用于动态更新图形的场景。

    函数原型:

    pyplot.pause(interval)
    参数:interval:时间,秒

    x = np.arange(0, 2*np.pi, 0.1)
    y = np.sin(x)
    ld, = plt.plot(x, y, label='sin')

    # 获取图像中label数据
    # ret = ld.get_label()
    # print(ret)

    y = np.cos(x)
    # 根据指定的时间暂停程序
    plt.pause(5)
    # 修改原图像的数据
    ld.set_data(x, y)

    plt.show()

    3.绘制子图网格

            使用模块gridspec中的函数GridSpec绘制

            在 Matplotlib 中,GridSpec 对象提供了一种灵活的方式来创建子图网格(subplots grid),允许子图跨越多个行和列,以及具有不均匀的行高和列宽。

    from matplotlib.gridspec import GridSpec

    GridSpec(nrows, ncols, figure=None, left=None, right=None, bottom=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None, w_pad=None, h_pad=None)

    参数:nrows: int子图网格的行数。

            ncols: int子图网格的列数。

            figure: matplotlib.figure.Figure,

                       optional,

                       default: None

                       指定的图形对象。如果未提供,则默认创建一个新的图形对象。

            left: float, optional, default: None子图网格左侧的相对位置(01 的比例)。如果未指定,则使用默认的左边界。

            right: float, optional, default: None子图网格右侧的相对位置(01 的比例)。如果未指定,则使用默认的右边界。

            bottom: float, optional, default: None子图网格底部的相对位置(01 的比例)。如果未指定,则使用默认的底边界。

            top: float, optional, default: None子图网格顶部的相对位置(01 的比例)。如果未指定,则使用默认的顶边界。

            wspace: float or None, optional, default: None子图之间的水平间距(以英寸为单位)或作为子图宽度的比例。如果未指定,则使用默认的间距。

            hspace: float or None, optional, default: None子图之间的垂直间距(以英寸为单位)或作为子图高度的比例。如果未指定,则使用默认的间距。

            width_ratios: list of floats, optional, default: None

    指定每一列的宽度比例。如果指定,则 ncols 必须与列表长度匹配。

            height_ratios: list of floats, optional, default: None

    指定每一行的高度比例。如果指定,则 nrows 必须与列表长度匹配。

            w_pad: float, optional, default: None子图之间的水平填充(以英寸为单位)。如果未指定,则使用默认的填充。

            h_pad: float, optional, default: None子图之间的垂直填充(以英寸为单位)。如果未指定,则使用默认的填充。

    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.gridspec import GridSpec
    # import matplotlib.gridspec as gs
    fig = plt.figure()

    # 添加子图网格
    gs = GridSpec(2, 3)
    # 在第一行添加三个子图
    fig.add_subplot(gs[0, 0])
    fig.add_subplot(gs[0, 1])
    fig.add_subplot(gs[0, 2])
    # 在第二行添加一个子图
    fig.add_subplot(gs[1, :])

    plt.show()

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 小杰python高级(four day)——matplotlib库
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!