一. 啥是Matplotlib?
Matplotlib是一个2Dpython专用的画图工具包,和matlab具有一样的权威性,可以用来绘制各种静态、动态,交互式的图表。
pandas和seaborn的画图功能也是基于Matplotlib的接口进行封装的。
二.举个例子
Matplotlib的图像是画在
figure上的,每一个figure又包含了一个或多个axes,最简单的创建figure以及axes的方式是通过pyplot.subplots命令,创建axes以后,可以使用Axes.plot绘制最简易的折线图。
理解:figure可以看成一个显示画布,axes为画布上的一个图案,若是不指定axes的情况下,默认为一个axes为一个figure。
import matplotlib.pyplot as pltimport numpy as npfig, ax = plt.subplots() # 创建一个包含一个axes的figureax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 绘制图像
当然也可以不写fig,ax = plt.subplots(),当只有一个图像的时候,可以不写的。就像这样:
import matplotlib.pyplot as pltimport numpy as npx = [i for i in range(10)]y = np.random.rand(10)plt.plot(x,y) # 绘制图像
三、Figure的层级
Figure通常分为4个层级,一个上层级包含若干下层级。
Figure:顶层级,用来容纳所有绘图元素;Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成;Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素;Tick:axis的下属层级,用来处理所有和刻度有关的元素;
四、两种绘图方式
matplotlib提供了两种最常用的绘图方式
- 显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)
- 依赖pyplot自动创建figure和axes,并绘图
两种模式是有一定区别的。

- Figure fig = plt.figure(): 可以解释为画布。
- 画图的第一件事,就是创建一个画布figure,然后在这个画布上加各种元素。
- Axes ax = fig.add_subplot(1,1,1): 不想定义,没法定义,就叫他axes!
从代码层面来看,两者的写法区别如下。一般推荐而言,使用ax的画图方式更容易对整个画布的控制。
import matplotlib.pyplot as pltimport numpy as npx = np.linspace(0, 2, 100) #生成等差数列fig, ax = plt.subplots() # 创建画布ax.plot(x, x, label='linear') #画出标记为linear的线ax.plot(x, x**2, label='quadratic')ax.plot(x, x**3, label='cubic')ax.set_xlabel('x label') #显示X轴的名称ax.set_ylabel('y label')ax.set_title("Simple Plot") #设置标题ax.legend()
x = np.linspace(0, 2, 100) #等差数列#相对而言,少了fig, ax = plt.subplots()创建画布这一步,且后面的ax默认为plot。plt.plot(x, x, label='linear')plt.plot(x, x**2, label='quadratic')plt.plot(x, x**3, label='cubic')plt.xlabel('x label')plt.ylabel('y label')plt.title("Simple Plot")plt.legend()
用一个例子加深对ax画图的理解
目标:一张纸上左边画一个折线图,右边画一个散点图
import matplotlib.pyplot as pltimport numpy as npfig, ax = plt.subplots(nrows=1,ncols=2) # 创建一个包含一个axes的figureax[0].plot([1,2,3],[4,5,6])ax[1].scatter([1,2,3],[4,5,6])





