一. 啥是Matplotlib?

Matplotlib是一个2Dpython专用的画图工具包,和matlab具有一样的权威性,可以用来绘制各种静态、动态,交互式的图表。
pandas和seaborn的画图功能也是基于Matplotlib的接口进行封装的。

二.举个例子

Matplotlib的图像是画在figure上的,每一个figure又包含了一个或多个axes,最简单的创建figure以及axes的方式是通过pyplot.subplots命令,创建axes以后,可以使用Axes.plot绘制最简易的折线图。

理解:figure可以看成一个显示画布,axes为画布上的一个图案,若是不指定axes的情况下,默认为一个axes为一个figure

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig, ax = plt.subplots() # 创建一个包含一个axes的figure
  4. ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 绘制图像

image.png

当然也可以不写fig,ax = plt.subplots(),当只有一个图像的时候,可以不写的。就像这样:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = [i for i in range(10)]
  4. y = np.random.rand(10)
  5. plt.plot(x,y) # 绘制图像

image.png

三、Figure的层级

Figure通常分为4个层级,一个上层级包含若干下层级。

  • Figure:顶层级,用来容纳所有绘图元素;
  • Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成;
  • Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素;
  • Tick:axis的下属层级,用来处理所有和刻度有关的元素;

微信截图_20201213202559.png

四、两种绘图方式

matplotlib提供了两种最常用的绘图方式

  1. 显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)
  2. 依赖pyplot自动创建figure和axes,并绘图

两种模式是有一定区别的。
一、Matplotlib初识 - 图4一、Matplotlib初识 - 图5
一、Matplotlib初识 - 图6

  • Figure fig = plt.figure(): 可以解释为画布。
    • 画图的第一件事,就是创建一个画布figure,然后在这个画布上加各种元素。
  • Axes ax = fig.add_subplot(1,1,1): 不想定义,没法定义,就叫他axes!

从代码层面来看,两者的写法区别如下。一般推荐而言,使用ax的画图方式更容易对整个画布的控制。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(0, 2, 100) #生成等差数列
  4. fig, ax = plt.subplots() # 创建画布
  5. ax.plot(x, x, label='linear') #画出标记为linear的线
  6. ax.plot(x, x**2, label='quadratic')
  7. ax.plot(x, x**3, label='cubic')
  8. ax.set_xlabel('x label') #显示X轴的名称
  9. ax.set_ylabel('y label')
  10. ax.set_title("Simple Plot") #设置标题
  11. ax.legend()

微信截图_20201213202559.png

  1. x = np.linspace(0, 2, 100) #等差数列
  2. #相对而言,少了fig, ax = plt.subplots()创建画布这一步,且后面的ax默认为plot。
  3. plt.plot(x, x, label='linear')
  4. plt.plot(x, x**2, label='quadratic')
  5. plt.plot(x, x**3, label='cubic')
  6. plt.xlabel('x label')
  7. plt.ylabel('y label')
  8. plt.title("Simple Plot")
  9. plt.legend()

微信截图_20201213202559.png

用一个例子加深对ax画图的理解
目标:一张纸上左边画一个折线图,右边画一个散点图

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig, ax = plt.subplots(nrows=1,ncols=2) # 创建一个包含一个axes的figure
  4. ax[0].plot([1,2,3],[4,5,6])
  5. ax[1].scatter([1,2,3],[4,5,6])

image.png