一. 啥是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 plt
import numpy as np
fig, ax = plt.subplots() # 创建一个包含一个axes的figure
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 绘制图像
当然也可以不写fig,ax = plt.subplots()
,当只有一个图像的时候,可以不写的。就像这样:
import matplotlib.pyplot as plt
import numpy as np
x = [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 plt
import numpy as np
x = 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 plt
import numpy as np
fig, ax = plt.subplots(nrows=1,ncols=2) # 创建一个包含一个axes的figure
ax[0].plot([1,2,3],[4,5,6])
ax[1].scatter([1,2,3],[4,5,6])