一、Matplotlib 库简介
Matplotlib 是 Python 中强大的数据可视化库,支持跨平台运行,能基于 NumPy 的 ndarray 数组绘制精美的 2D 图像。它的语法简单易懂,代码清晰,让开发者可以轻松地将数据转化为直观的可视化图表。
Matplotlib 图形主要由 Figure、Axes、Axis 和 Artist 组成:
- Figure:整个图形,就像一张画布,容纳了所有的绘图元素,包括标题、轴线等。
- Axes:绘制 2D 图像的实际区域,也叫轴域区或绘图区,是图形的核心部分。
- Axis:坐标系中的垂直轴与水平轴,包含轴长、轴标签和刻度标签,用于界定数据的展示范围和标注信息。
- Artist:画布上的所有元素,如文本对象(标题、轴标签)、Line2D 对象(用于绘制 2D 图像的线条)等,都属于 Artist 对象。
二、安装 Matplotlib
使用 pip 安装 Matplotlib 非常简单,在命令行中执行以下命令:
pip install matplotlib==3.3.4 -i https://pypi.tuna.tsinghua.edu.cn/simple/
上述命令指定安装版本为 3.3.4,并使用清华大学的镜像源加速下载。
三、Matplotlib 常用 API
3.1 绘图类型
Matplotlib 提供了丰富的绘图函数,用于创建各种类型的图表:
函数名称 | 描述 |
---|---|
Bar | 绘制条形图,用于比较不同类别数据的大小 |
Barh | 绘制水平条形图,适合展示较多类别时的数据对比 |
Boxplot | 绘制箱型图,展示数据的分布特征和统计信息 |
Hist | 绘制直方图,展示数值数据的分布情况 |
his2d | 绘制 2D 直方图,用于展示两个变量的联合分布 |
Pie | 绘制饼状图,展示分类数据的占比情况 |
Plot | 在坐标轴上画线或者标记,常用于绘制折线图 |
Polar | 绘制极坐标图,适用于展示具有角度和半径关系的数据 |
Scatter | 绘制 x 与 y 的散点图,展示两个变量之间的关系 |
Stackplot | 绘制堆叠图,展示多个数据系列的累积情况 |
Stem | 绘制二维离散数据(火柴图),突出离散数据点 |
Step | 绘制阶梯图,适合展示数据的变化阶段 |
Quiver | 绘制一个二维按箭头,用于展示向量场 |
3.2 Image 函数
处理图像数据时,Matplotlib 的 Image 函数很有用:
函数名称 | 描述 |
---|---|
Imread | 从文件中读取图像的数据并形成数组 |
Imsave | 将数组另存为图像文件 |
Imshow | 在数轴区域内显示图像 |
3.3 Axis 函数
Axis 函数用于对坐标轴进行设置和操作:
函数名称 | 描述 |
---|---|
Axes | 在画布 (Figure) 中添加轴 |
Text | 向轴添加文本 |
Title | 设置当前轴的标题 |
Xlabel | 设置 x 轴标签 |
Xlim | 获取或者设置 x 轴区间大小 |
Xscale | 设置 x 轴缩放比例 |
Xticks | 获取或设置 x 轴刻标和相应标签 |
Ylabel | 设置 y 轴的标签 |
Ylim | 获取或设置 y 轴的区间大小 |
Yscale | 设置 y 轴的缩放比例 |
Yticks | 获取或设置 y 轴的刻标和相应标签 |
四、Matplotlib 常用函数
4.1 plot 函数
pylab.plot
用于绘制二维图形,可根据提供的 x 和 y 数据点绘制线条和 / 或标记。
import pylab
x = pylab.linspace(-6, 6, 40)
y = x**2
pylab.plot(x, y, 'r:')
pylab.show()
上述代码使用linspace
生成等差数列作为 x 轴数据,计算对应的 y 轴数据后,用红色点线绘制图形。
4.2 figure 函数
figure()
函数用于实例化 figure 对象,可设置图形样式。figure.add_axes()
用于在画布中添加轴域对象,axes.legend()
用于添加图例,方便识别不同数据系列。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(8, 6))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
x = np.linspace(0, 10, 100)
y = np.sin(x)
ax.plot(x, y)
plt.savefig('test.png')
plt.show()
4.3 subplot 相关函数
subplot
是较早期的函数,用于创建并返回子图对象,通常用于创建网格状子图布局。add_subplot
是 Figure 类的方法,更灵活,推荐使用。subplots
函数可创建包含多个子图的图形窗口,返回包含所有子图的数组,方便操作。subplot2grid
函数允许更灵活地指定子图位置和大小,创建复杂布局。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
fig, axs = plt.subplots(1, 3, figsize=(12, 4))
axs[0].plot(x, y1, label='sin(x)')
axs[0].set_title('Sine Wave')
axs[1].plot(x, y2, label='cos(x)')
axs[1].set_title('Cosine Wave')
axs[2].plot(x, y3, label='tan(x)')
axs[2].set_title('Tangent Wave')
for ax in axs:
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.legend()
plt.tight_layout()
plt.show()
4.4 其他常用函数
- grid 函数:用于在图形中添加网格线,帮助读者理解数据分布和趋势。
- xscale 和 yscale 函数:设置坐标轴的刻度类型,如线性刻度、对数刻度等。
- set_xlim 和 set_ylim 函数:设置坐标轴的范围。
- set_xticks 和 set_yticks 函数:手动指定坐标轴的刻度位置。
- twinx 和 twiny 函数:在同一个图形中创建共享 X 轴或 Y 轴的多个子图。
五、常见图表绘制
Matplotlib 可以绘制多种常见图表:
- 柱状图:展示分类数据的分布情况,有普通柱状图、堆叠柱状图和分组柱状图等形式。
- 直方图:展示数值数据的分布。
- 饼图:展示分类数据的占比。
- 折线图:通过
plot
函数绘制,展示数据的变化趋势。 - 散点图:展示两个变量之间的关系。
柱状图举例:
import matplotlib.pyplot as plt
import numpy as np
# 定义柱状图的标签
labels = ['A', 'B', 'C', 'D', 'E']
# 定义每个柱子对应的数值
sizes = [20, 35, 30, 25, 40]
# 设置图形的大小
plt.figure(figsize=(8, 6))
# 创建柱状图
plt.bar(labels, sizes, color='skyblue')
# 添加标题和坐标轴标签
plt.title('Simple Bar Chart')
plt.xlabel('Categories')
plt.ylabel('Values')
# 显示图形
plt.show()
六、标题中文乱码处理
局部处理:
当标题设置为中文时,可能会出现乱码。局部处理可通过修改rcParams
实现:
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
全局处理:
首先,找到 matplotlibrc 文件的位置,可以使用以下代码:
import matplotlib
print(matplotlib.matplotlib_fname())
然后,修改 matplotlibrc 文件,找到 font.family 和 font.sans-serif 项,设置为支持中文的字
体,如 SimHei。 同时,设置 axes.unicode_minus 为 False 以正常显示负号。