matplotlib是图形绘制库,使用matplotlib可以方便的绘制函数图形、以及直方图、条形图、散点图等统计图形。
1、安装Matplotlib
进入操作系统的命令行窗口,在命令行窗口输入并执行下面的命令:
python -m pip install -U pip setuptools python -m pip install -U matplotlib
上述命令可安装最新的matplotlib版本。
2、 Matplotlib的几个概念
matplotlib是图形绘制库,学习matplotlib最好的方法就是一边学习一边实践,现在就从最简单的绘制函数图像开始。
绘制函数图像之前,先了解几个matplotlib概念。
pyplot(绘图模块)
pyplot是matplotlib库的核心模块,主要绘制二维图形,将线、图形、文本等绘制到Figure(画布)。
Figure(画布)
Figure可以理解为画布,也就是绘图区域。在画布上有坐标轴,一个画布允许有多个坐标轴,画布上还有标题、绘图对象、交互组件等。
例1 创建Figure
案例代码见课程资源(unit3\case01.py)
# 导入pyplot模块
import matplotlib.pyplot as plt
# 创建没有轴的figure
fig = plt.figure()
# 设置figure的标题
fig.suptitle('No axes on this figure')
# 创建具有2X2轴的figure
fig, ax_lst = plt.subplots(2, 2)
plt.show()代码解读
pyplot模块的figure()函数创建一个空的画布,画布上没有轴,函数返回figure对象。suptitle()是figure对象的方法,用于设置画布标题。pyplot模块的subplots ()函数创建具有多个轴的画布,当然也可以只有一个轴,可以把每一个轴作为画布上的一个子图开看待。pyplot模块的show()函数会将画布显示到窗口。
例1代码执行后,程序会显示两个画布,在后面的内容中,画布也称为绘图窗口。


Axes(轴空间)
Axes(轴空间)是Figure(画布)上的绘图空间,在Figure(画布)绘图时,可以把Figure(画布)分成多个绘图空间,例1就创建了具有4个绘图空间的Figure(画布)。Axes(轴空间)可以包含多个轴。
Axis(轴)
Axis(轴)是绘图用的坐标系。
绘图数据
matplotlib的所有绘图函数都以numpy数组,或者numpy的masked数组(掩码数组)为输入数据。
pyplot是Matplotlib的绘图模块,使用Matplotlib绘制图形都要用到pyplot模块,该模块的所有函数都会在Axes(轴空间)和Axis(轴)内绘图,若开发者没有创建Axes(轴空间)和Axis(轴), pyplot会自动创建它们。例如:在例2中,pyplot模块会默认创建Axes(轴空间)和Axis(轴),然后调用绘图函数在默认轴上绘制直线,设置Axes(轴空间)标题,设置绘图标签并添加图例。
例2 使用pyplot绘制图形
案例代码见课程资源(unit3\case02.py)
# 导入pyplot模块
import matplotlib.pyplot as plt
# 导入numpy模块
import numpy as np
# 在0~2范围内均匀创建100个数据点
x = np.linspace(0, 2, 100)
# plot为绘图函数
# 绘制直线y=x
plt.plot(x, x, label='linear')
# 绘制二次函数y=x^2
plt.plot(x, x**2, label='quadratic')
# 绘制三次函数y=x^3
plt.plot(x, x**3, label='cubic')
# 设置X轴标签
plt.xlabel('x label')
# 设置Y轴标签
plt.ylabel('y label')
# 设置绘图标题
plt.title("Simple Plot")
# 显示图例
plt.legend()
# 显示绘图窗口
plt.show()3、 如何使用Matplotlib绘图
使用Matplotlib绘图,需要导入numpy库和pyplot模块,绘图程序的顶部导入通常是:
import matplotlib.pyplot as plt import numpy as np
然后进行绘图操作。例如:调用np的函数创建绘图数据,调用pyplot模块的函数创建Figure(画布)、Axes(轴空间),调用pyplot模块的绘图函数绘制线条、文本等内容:
x = np.arange(0, 10, 0.2) y = np.sin(x) fig, ax = plt.subplots() ax.plot(x, y) plt.show()
绘图案例代码见例2。
在一些情况下,绘图代码需要重复使用,只是绘制不同的数据集,可以参照下面的代码编写绘图通用函数:
def my_plotter(ax, data1, data2, param_dict): """ 通用绘图函数 参数 ---------- ax : Axes(轴空间) 绘图图形的轴空间 data1 : array 二维坐标系的X数据 data2 : array 二维坐标系的Y数据 param_dict : dict 传入ax.plot的关键字参数 Returns ------- out : list 返回绘图对象列表 """ out = ax.plot(data1, data2, **param_dict) return out
调用通用绘图函数的代码样例如下:
# 创建绘图数据
data1, data2, data3, data4 = np.random.randn(4, 100)
# 创建Figure(画布)、Axes(轴空间)
fig, ax = plt.subplots(1, 1)
# 调用绘图函数
my_plotter(ax, data1, data2, {'marker': 'x'})