matplotlib教程
第一章 初识matplotlib
1.1 matplotlib概述
matplotlib是由约翰 ⋅ \cdot ⋅亨特等人仿照MATLAB写的一种用于绘制2D、3D图表的工具。该工具不仅提供丰富的图表绘制函数,而且可以对图表样式和元素进行定制。目前,matplotlib支持numpy和pandas数据结构。为了方便操作,matplotlib官方提供3种API::pyplotAPI, object-oriented API、pylab API。
1. pyplot API
pyplot API使用pyplot模块开发接口,该接口底层封装了一系列与MATLAB命令同名的函数,使得MATLAB用户可以快速绘制图表。当使用pyplotAPI绘图时,需要先使用“import matplotlib.pyplot as plt”语句导入pyplot模块,并使用该模块调用绘制函数可在当前的画布和绘图区域中绘制图表。
2. object-oriented API
object-oriented API是面向对象的接口,该接口包含了一系列对应图表元素的类,只有创建这些类的对象并按照隶属关系组合到一起才能完成绘制。当使用object-oriented API绘图时,首先创建画布(Figure类对象),再在该画布上添加拥有坐标系统的绘图区域(Axes类对象),最后在该绘图区域中调用绘图方法绘制图表。
3. pylab API
pylab API是使用pylab模块开发的接口,最初是为了模仿MATLAB工作方式而设计的,包括pyplot、numpy模块及一些其他附加功能。matplot官方不建议使用pylab API进行开发,并在最新版中弃用了pylab API。
1.2 matplotlib绘制图形的层次结构
matplotlib绘制图表和画素描类似,假设我们想画一幅素描,首先需要在画架上放置一个画板,然后在画板上固定一张素描纸,最后在素描纸上进行创作。同理,matlablib绘制的图形并非只有一一层结构,它也是由多层结构组成,以便对每层结构进行单独设置。
matplotlib绘制的图形主要由三层结构组成:容器层、图像层和辅助显示层。
1. 容器层
容器层主要由Canvas对象、Figure对象和Axes对象组成,其中Canvas对象充当画板的角色,位于底层;Figure对象充当素描纸的角色,即画布,它可以包含多个图表,位于Canvas对象上方,也就是用户操作的第一层;Axes对象充当画布中绘图区域的角色,它拥有独立的坐标系,可以将其看作一个图表,位于Figure对象的上方,也就是用户操作应用层的第二层。它们之间的关系如下图所示。
图1-1 Canvas对象、Figure对象和Axes对象之间的关系
2. 图像层
图像层是指在绘图区域内绘制的图形。
3. 辅助显示层
辅助显示层是指在绘图区域内除绘制图形以外的元素,包括坐标轴、标题、注释文本等。
实例 1-1:
步骤一:创建画布
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.linspace(0, 10, 100)
y = x ** 2
fig = plt.figure() # 创建画布
步骤二:创建带坐标系的绘图区域
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.linspace(0, 10, 100)
y = x ** 2
fig = plt.figure() # 创建画布
ax = fig.add_subplot(111) # 创建坐标系绘图区域
plt.show()

步骤三:绘制曲线
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.linspace(0, 10, 100)
y = x ** 2
fig = plt.figure() # 创建画布
ax = fig.add_subplot(111) # 创建坐标系绘图区域
ax.plot(x, y) # 绘制曲线
plt.show()

第二章 常见的绘图函数
2.1 折线图
折线图是将数据标注成点,并通过直线将这些点按顺序连接而成的图表,主要用于反映事物延某个维度的变化趋势,例如数据增减趋势、速率和峰值等特征。plot()函数的语法格式如下:
plot(x, y, fmt, scalex=True, scaley=True, data=None, label=None, *args, *kwargs)
# x表示x轴的数据。
# y表示y轴的数据。
# fmt表示快速设置线条样式的格式字符串。
# label表示应用于图例的标签文本。
实例 2-1 见实例1-1。
2.2 散点图
散点图又称X-Y图,是由若干个数据点组成的图表,主要用于判断两变量之间的相关性。若所有数据点在一条直线附近波动,说明变量之间是线性相关的;若所有数据点在曲线附近波动,说明变量之间是非线性相关的;若所有数据点没有显示任何关系,说明变量之间是不相关的。scatter()函数的语法格式如下:
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None)
# x表示x轴的数据。
# y表示y轴的数据。
# s表示数据点大小。
# c表示数据点颜色。
# marker表示数据点的样式,默认为圆点。
# cmap表示数据点的颜色映射表,仅当参数c为浮点数组时才能够使用。
# norm表示数据点的亮度,可以取值为0~1。
# vmin表示亮度的最小值。
# vmax表示亮度的最大值。
# alpha表示透明度。
# linewidths表示数据点边缘的宽度。
# edgecolors表示数据点边缘的颜色。
实例 2-2
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.linspace(0, 10, 30)
y = x ** 2
area = np.linspace(0, 10, 30) * 5
fig = plt.figure() # 创建画布
ax = fig.add_subplot(111) # 创建坐标系绘图区域
ax.scatter(x, y, s=area, c='tomato') # 绘制散点图
plt.show()

2.3 箱形图
箱形图又称盒须图、箱线图,是一种利用数据中的5个统计量(最大值、上四分位数、中位数、下四分位数和最小值)来描述的图表,主要用于识别异常值、判断偏态与尾重、比较数据形状,箱形图的结构及异常值如下图所示。
图1-5 箱形图结构与异常值
boxplot()函数的语法格式如下:
boxplot(x, notch=None, sym=None, vert=None, whis=None, position=None, widths=None, patch_artist=None, usermedians=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, *, data=None)
# x表示绘制箱形图的数据。
# sym表示异常值对应的符号,默认值为空心圆圈。
# vert表示是否将箱形图垂直摆放,默认为垂直摆放。