主图(Figure)

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

参数:
num:int or str or Figure, optional
figsize(float, float), default: rcParams[“figure.figsize”] (default: [6.4, 4.8]),英寸值表示的宽度和高度
dpi:float, default: rcParams[“figure.dpi”] (default: 100.0),图形的分辨率,单位为每英寸点数
facecolor:color, default: rcParams[“figure.facecolor”] (default: ‘white’),背景色。
edgecolorcolor, default: rcParams[“figure.edgecolor”] (default: ‘white’),边界颜色。
frameon:bool, default: True,如果为False,则禁止绘制图形框。
Figure:Classsubclass of Figure
clear:bool, default: False,如果为True且该图形已存在,则该图形将被清除。
tightlayout:_bool or dict, default: rcParams[“figure.autolayout”] (default: False)
如果为False,则使用Subplopars。如果为True,则使用带默认填充的紧密布局调整子批次参数。当提供包含pad, wpad, h_pad和rect的dict时,默认的紧密布局填充将被覆盖。
**constrained_layou:t_bool, default:
rcParams[“figure.constrained_layout.use”] (default: False)**
如果为True,请使用约束布局调整打印元素的位置。喜欢紧凑的布局,但设计更灵活。

返回值
Figure

  1. matplotlib.figure.Figure(figsize=None, dpi=None, facecolor=None, edgecolor=None,
  2. linewidth=0.0, frameon=None, subplotpars=None,
  3. tight_layout=None, constrained_layout=None, *,
  4. layout=None, **kwargs)

就是整张绘图区域。主图和所有的从属的子坐标轴区域有联系,少数的像坐标轴区域的题目,图例等等和画布。(不用过于担心画布,实际上是画布去完成绘图,但是对于调用函数的人来说,或多或少它是不可见的)。一个主图会包含一个或者多个坐标轴区域。
生成一个主图的最简单的方法是使用pyplot:

  1. import matplotlib.pyplot as plt
  2. fig = plt.figure() # 生成一个没有坐标轴的主图
  3. print(fig) # Figure(640x480)
  4. fig, ax = plt.subplots() # 返回两个值,第一个是主图,第二个是一套坐标轴
  5. print(fig, ax) # Figure(640x480) AxesSubplot(0.125,0.11;0.775x0.77)
  6. fig, axs = plt.subplots(2,2) # 一个主图和四个坐标轴,按照2x2排列
  7. print(fig, axs) # Figure(640x480) [[<AxesSubplot:> <AxesSubplot:>]
  8. # [<AxesSubplot:> <AxesSubplot:>]]

把坐标轴和主图一起创建是很方便的,也可以在创建主图之后在添加坐标轴区域,添加跟多的复杂的坐标轴属性。
坐标轴区域(Axes)
坐标轴区域就是绘图的区域,这是图像加数据的区域。一个主图可以包含多套坐标轴区域,但是一套坐标轴区域只能从属于一个主图。一个坐标轴区域包含两条或者三条坐标轴。坐标轴的限制(极限)会和数据相关,这个极限也可以通过axes.Axes.set_xlim()方法来控制,坐标轴的名字通过axes.Axes.set_title()控制,axes.Axes.set_label()可以控制坐标轴的标签。
坐标轴(axis)
数值轴。坐标轴的属性关注的是设定图表的极限值和产生坐标轴的标志和坐标轴的名称。名称的位置取决于Locator对象,标签式的字符串会被Formatter格式化。Locator和Formatter会很好地控制标识的位置和标签。
Artist对象(Artist)
所有在主图上可以看到的东西都是一个Artist对象(甚至是Figure对象,Axes对象和坐标轴axies对象)。这个包含了Text对象,Line2D对象,collection对象,Patch对象等。当主图被绘制出来后,所有的Artist对象都会在画布上被画出来。大多数的Artist对象都会被绑定在坐标轴区域对象上,不能共享,也不能移动。
给绘图函数输入参数的类型
所有的绘图函数的输入参数都是numpy的数组或者numpy的ma.masked_arrary(带掩码的numpy数组),类数组类型的像panda数组或者numpy的矩阵有可能会不支持。最好在画图之前先把它们转化为numpy数组。
面向对象的界面和绘画界面
就像上面提到的,使用Matplotlib有两个至关重要的点:
明确地建立主图和坐标轴区域,对它们使用方法(就是面向对象的操作方法)
依靠pyplot去自动建立和管理主图和坐标轴,使用pyplot函数去绘图
面向对象风格:
在大型工程中推荐使用

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. x = np.linspace(0, 2 * np.pi) # 产生0-2pi之间50个点的数组
  4. fig, ax = plt.subplots() # 建立Figure对象和Axes对象
  5. ax.plot(x, np.sin(x), label='sin(x)')
  6. ax.plot(x, np.cos(x), label='cos(x)')
  7. # 由于都是使用ax,因此都是在同一个坐标轴区域绘图
  8. ax.set_xlabel('x') # 设置x轴的名称
  9. ax.set_ylabel('y') # 设置y轴名称
  10. ax.set_title("Sine-Cosine function") # 给坐标轴区域一个名字
  11. ax.legend() # 显示图例,如果没有这个,曲线的label不会显示
  12. plt.show() # 显示绘制结果

matplotlib风格(不使用对象)

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. x = np.linspace(0, 2 * np.pi) # 产生0-2pi之间50个点的数组
  4. plt.plot(x, np.sin(x), label='sin(x)')
  5. plt.plot(x, np.cos(x), label='cos(x)')
  6. # 由于都是使用ax,因此都是在同一个坐标轴区域绘图
  7. plt.xlabel('x') # 设置x轴的名称
  8. plt.ylabel('y') # 设置y轴名称
  9. plt.title("Sine-Cosine function") # 给坐标轴区域一个名字
  10. plt.legend() # 显示图例,如果没有这个,曲线的label不会显示
  11. plt.show() # 显示绘制结果

image.png