介绍
Matplotlib 是支持 Python 语言的开源绘图库,因为其支持丰富的绘图类型、简单的绘图方式以及完善的接口文档,深受 Python 工程师、科研学者、数据工程师等各类人士的喜欢。本次实验课程中,我们将学会使用 Matplotlib 绘图的方法和技巧。
在使用机器学习方法解决问题的过程中,一定会遇到需要针对数据进行绘图的场景。Matplotlib 是支持 Python 语言的开源绘图库,因为其支持丰富的绘图类型、简单的绘图方式以及完善的接口文档,深受 Python 工程师、科研学者、数据工程师等各类人士的喜欢。Matplotlib 拥有着十分活跃的社区以及稳定的版本迭代,当我们在学习机器学习的课程时,掌握 Matplotlib 的使用无疑是最重要的准备工作之一。
在使用 Notebook 环境绘图时,需要先运行 Jupyter Notebook 的魔术命令 %matplotlib inline。这条命令的作用是将 Matplotlib 绘制的图形嵌入在当前页面中。而在桌面环境中绘图时,不需要添加此命令,而是在全部绘图代码之后追加 plt.show()。
%matplotlib inline
简单图形绘制
使用 Matplotlib 提供的面向对象 API,需要导入 pyplot 模块,并约定简称为 plt。
from matplotlib import pyplot as plt
我们都说了,Matplotlib 是一个非常简单而又完善的开源绘图库。那么它到底有多简单呢?下面,我们通过 1 行代码绘制一张简单的折线图。
plt.plot([1, 2, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1])
可以看到,一张和山峰样式相似的折线图就绘制出来了。
前面,我们从 Matplotlib 中导入了 pyplot 绘图模块,并将其简称为 plt。pyplot 模块是 Matplotlib 最核心的模块,几乎所有样式的 2D 图形都是经过该模块绘制出来的。这里简称其为 plt 是约定俗成的,希望你也这样书写代码,以便拥有更好的可读性。
plt.plot() 是 pyplot 模块下面的直线绘制(折线图)方法类。示例中包含了一个 [1, 2, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1] 列表,Matplotlib 会默认将该列表作为 yy 值,而 xx 值会从 00 开始依次递增。
当然,如果你需要自定义横坐标值,只需要传入两个列表即可。如下方代码,我们自定义横坐标刻度从 2 开始。
上面演示了如何绘制一个简单的折线图。那么,除了折线图,我们平常还要绘制柱状图、散点图、饼状图等等。这些图应该怎样绘制呢?
pyplot 模块中 pyplot.plot 方法是用来绘制折线图的。你应该会很容易联想到,更改后面的方法类名就可以更改图形的样式。的确,在 Matplotlib 中,大部分图形样式的绘制方法都存在于 pyplot 模块中。例如:
方法 含义
matplotlib.pyplot.angle_spectrum 绘制电子波谱图
matplotlib.pyplot.bar 绘制柱状图
matplotlib.pyplot.barh 绘制直方图
matplotlib.pyplot.broken_barh 绘制水平直方图
matplotlib.pyplot.contour 绘制等高线图
matplotlib.pyplot.errorbar 绘制误差线
matplotlib.pyplot.hexbin 绘制六边形图案
matplotlib.pyplot.hist 绘制柱形图
matplotlib.pyplot.hist2d 绘制水平柱状图
matplotlib.pyplot.pie 绘制饼状图
matplotlib.pyplot.quiver 绘制量场图
matplotlib.pyplot.scatter 散点图
matplotlib.pyplot.specgram 绘制光谱图
下面,我们参考折线图的绘制方法,尝试绘制几个简单的图形。
matplotlib.pyplot.plot(*args, **kwargs) 方法严格来讲可以绘制线形图或者样本标记。其中,*args 允许输入单个 yy 值或 x, yx,y 值。
例如,我们这里绘制一张自定义 x, yx,y 的正弦曲线图。
import numpy as np # 载入数值计算模块
# 在 -2PI 和 2PI 之间等间距生成 1000 个值,也就是 X 坐标
X = np.linspace(-2*np.pi, 2*np.pi, 1000)
# 计算 y 坐标
y = np.sin(X)
# 向方法中 `*args` 输入 X,y 坐标
plt.plot(X, y)