matpyplot简单使用

Matplotlib图形组成

Matplotlib 生成的图形主要由以下几个部分构成:

image-20220224213506515
  • Figure:指整个图形,您可以把它理解成一张画布,它包括了所有的元素,比如标题、轴线等;
  • Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;
  • Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小(图中轴长为 7)、轴标签(指 x 轴,y轴)和刻度标签;
  • Artist:您在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等

Matplotlib.pyplot接口汇总

Matplotlib figure图形对象

在 Matplotlib 中,面向对象编程的核心思想是创建图形对象(figure object)。通过图形对象来调用其它的方法和属性,这样有助于我们更好地处理多个画布。在这个过程中,pyplot 负责生成图形对象,并通过该对象来添加一个或多个 axes 对象(即绘图区域)。

备注:可以使用figsize属性指定画布大小,单位英寸

#创建一个空白画布
fig = plt.figure()
# 使用 add_axes() 将 axes 轴域添加到画布中,
'''
序列中的 4 个数字分别对应图形的左侧,底部,宽度,和高度,且每个数字必须介于 0 到 1 之间。
应该是指绘图区距离画布的左侧和底部多远,宽度和高度分别占画布多大
'''
ax=fig.add_axes([0,0,1,1])

image-20220224225752426

Matplotlib axes类使用详解

Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布(figure)中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。

通过调用图形图像的add_axes()方法可以将 axes 对象添加到画布中。axes 对象在画布中的位置由函数参数rect决定。rect 是位置参数,接受一个由 4 个元素组成的浮点数列表,形如 [left, bottom, width, height] ,它表示添加到画布中的矩形区域的左下角坐标(x, y),以及宽度和高度。

axes 类的成员函数

  • axes.legend(handles,labels,loc):负责绘制图例。

    • handles 参数是一个序列,它包含了所有线型的实例;

    • labels 是一个字符串序列,用来指定标签的名称;

    • loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示;

      位置 字符串表示 整数数字表示
      自适应 Best 0
      右上方 upper right 1
      左上方 upper left 2
      左下 lower left 3
      右下 lower right 4
      右侧 right 5
      居中靠左 center left 6
      居中靠右 center right 7
      底部居中 lower center 8
      上部居中 upper center 9
      中部 center 10
  • axes.plot():使用方式同plt.plot()

    它可以绘制点和线,语法格式如下:

    # 画单条线
    plot([x], y, [fmt], *, data=None, **kwargs)
    # 画多条线
    plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
    

    参数说明:

    • x,y : 点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。
    • fmt : 可选,定义基本格式(如颜色、标记和线条样式)。fmt = '[marker][line][color]'
      • marker:'.' 点标记,'o' 实心圈标记,'s'正方形标记,'D'钻石标记,'H'六角标记,v' 倒三角标记,'^' 上三角标记,'>' 右三角标记,'<' 左三角标记,''无任何标记...等等。
      • line:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线,’'不画线...等等。
      • color:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。
    • **kwargs : 可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。
      • markersize,简写为 ms:定义标记的大小。
      • markerfacecolor,简写为 mfc:定义标记内部的颜色。
      • markeredgecolor,简写为 mec:定义标记边框的颜色。
      • linewidth ,简写为 lw,定义线的宽度;值可以是浮点数,如:1、2.0、5.67 等。
  • 其他:axes.set_xlabel()/set_ylabel()/set_title()使用方式类似plt.xlabel()/ylabel()/title()

    1. 使用 xlabel()ylabel() 方法来设置 x 轴和 y 轴的标签

    2. 使用 title() 方法来设置标题

    3. 标题与标签的定位

    • title() 方法提供了 loc 参数来设置标题显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'。
    • xlabel() 方法提供了 loc 参数来设置 x 轴显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'。
    • ylabel() 方法提供了 loc 参数来设置 y 轴显示的位置,可以设置为: 'bottom', 'top', 和 'center', 默认值为 'center'。
image-20220225112114868

Matplotlib subplot()函数用法详解

感觉配合图形对象使用感觉更方便,更推荐使用下一节介绍的方法

详细:Matplotlib subplot()函数用法详解 (biancheng.net)

在使用 Matplotlib 绘图时,我们大多数情况下,需要将一张画布划分为若干个子区域,之后,我们就可以在这些区域上绘制不用的图形。matplotlib.pyplot模块提供了一个 subplot() 函数,它可以均等地划分画布,该函数的参数格式如下:

plt.subplot(nrows, ncols, index)

nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。

配合图形对象:

使用函数add_subplot(nrows, ncols, index)函数返回一个 axes 对象。

image-20220225133939704

要调整子图之间的间距使用函数:

fig.subplots_adjust(
    left=None,
    bottom=None,
    right=None,
    top=None,
    wspace=None,
    hspace=None,
)

Matplotlib subplots()函数详解

matplotlib.pyplot模块提供了一个 subplots() 函数,它的使用方法和 subplot() 函数类似。其不同之处在于,subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,而 subplot() 只是创建一个包含子图区域的画布。

subplots 的函数格式如下:

fig , ax = plt.subplots(nrows, ncols)

备注:可以设置参数constrained_layout=True自适应子图间距

nrows 与 ncols 表示两个整数参数,它们指定子图所占的行数、列数。

函数的返回值是一个元组,包括一个图形对象和一个axes对象数组:[nrows, ncols];可以通过数组索引方式访问axes对象。

Matplotlib subplot2grid()函数详解

matplotlib.pyplot 模块提供了 subplot2grid() ,该函数能够在画布的特定位置创建 axes 对象(即绘图区域)。不仅如此,它还可以使用不同数量的行、列来创建跨度不同的绘图区域。与 subplot() 和 subplots() 函数不同,subplot2gird() 函数以非等分的形式对画布进行切分,并按照绘图区域的大小来展示最终绘图结果。

函数语法格式如下:

plt.subplot2grid(shape, location, rowspan, colspan)

参数含义如下:

  • shape:把该参数值规定的网格区域作为绘图区域;
  • location:在给定的位置绘制图形,初始位置 (0,0) 表示第1行第1列;
  • rowsapan/colspan:这两个参数用来设置让子区跨越几行几列。

Matplotlib grid()设置网格格式

axes 对象提供的 grid() 方法可以开启或者关闭画布中的网格(即是否显示网格)以及网格的主/次刻度。除此之外,grid() 函数还可以设置网格的颜色、线型以及线宽等属性。

grid() 的函数使用格式如下:

grid(color='b', ls = '-.', lw = 0.25)

参数含义如下:

  • color:表示网格线的颜色;
  • ls:表示网格线的样式;
  • lw:表示网格线的宽度;

网格在默认状态下是关闭的,通过调用上述函数,网格会被自动开启,如果您只是想开启不带任何样式的网格,可以通过 grid(True) 来实现。

image-20220225185626992

坐标轴设置

  1. 设置坐标轴范围

    axes.set_xlim(下限, 上限)

  2. 设置刻度

    1. 方法1

    采用axes.set_xticks(ticks)方法,x轴的刻度就是一维数组ticks。也可以通过 set_xticklabels()函数设置与刻度线相对应的刻度标签。

    image-20220225200244048
    1. 方法2

    见:(38条消息) matplotlib设置坐标轴刻度间隔_单单一个越字的博客-CSDN博客_matplotlib坐标轴刻度间距

Matplotlib中文乱码解决方案

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题

直方图

axes.hist(
    x,
    bins=None,
    range=None,
    density=False,
    weights=None,
    cumulative=False,
    bottom=None,
    histtype='bar',
    align='mid',
    orientation='vertical',
    rwidth=None,
    log=False,
    color=None,
    label=None,
    stacked=False,
    *,
    data=None,
    **kwargs,
)

统计连续型数据的直方图。

具体使用:matplotlib.pyplot.hist — Matplotlib 3.5.1 documentation

x : 待统计的数据,(n,) array or sequence of (n,) arrays

binsint or sequence or str

  • int:将数据划分为指定数量的统计区间,区间长度相等
  • sequence : assuming is [1,2,3,4], then the first bin is [1, 2) (including 1, but excluding 2) and the second [2, 3). The last bin, however, is [3, 4], which includes 4.

range : tuple or None, default: None

​ The lower and upper range of the bins. Lower and upper outliers are ignored. If not provided, range is (x.min(), x.max()). Range has no effect if bins is a sequence.

​ If bins is a sequence or range is specified, autoscaling is based on the specified bin range instead of the range of x.

rwidth : The relative width of the bars as a fraction of the bin width. If None, automatically compute the width.

image-20220323173724121 image-20220323174222047
posted @ 2022-02-25 20:17  呼叫哆啦A梦  阅读(261)  评论(0编辑  收藏  举报