Matplotlib
目录
Matplotlib
Matplotlib 是 Python 中最基础且最重要的数据可视化库。它提供了强大的、面向对象的 API,可以绘制出各种静态、动态或交互式的图表,是数据分析和科学研究中不可或缺的工具。
Matplotlib 核心概念
Matplotlib 的核心是它的层次结构,理解这个结构是定制复杂图形的关键。
1. 层次结构:Figure, Axes, Axis
当你使用 Matplotlib 绘图时,你是在构建一个包含不同组件的层次结构:
-
Figure (画布): 顶层容器,可以理解为整个窗口或页面。它包含了所有的子图 (Axes) 和标题、图例等。
-
Axes (子图/坐标系): 实际绘图区域,是数据点、线条、文本等元素绘制的地方。一个 Figure 可以包含多个 Axes,每个 Axes 都有独立的 X 轴和 Y 轴。
-
Axis (坐标轴): 负责处理刻度线 (Ticks)、刻度标签 (Tick Labels) 和轴标签 (Labels)。
2. 两种绘图接口
Matplotlib 主要有两种使用方式:
| 接口名称 | 描述 | 优势 |
|---|---|---|
Pyplot 接口 (plt) |
基于状态机的方式,快速绘图。使用 matplotlib.pyplot 模块,它会自动创建 Figure 和 Axes。 |
简单快速,适用于简单图形。 |
| 面向对象 (OO) 接口 | 显式创建 Figure 和 Axes 对象,然后调用 Axes 对象的方法进行绘图。 | 精细控制图形的每个元素,适用于复杂的多子图布局。 |
学习建议: 掌握 OO 接口是进行高级定制和创建复杂图形的最佳途径。
Matplotlib 基础绘图与 OO 接口
3. 使用面向对象接口绘图
这是 Matplotlib 的标准实践,用于获得最大的控制权:
-
创建 Figure 和 Axes: 使用
plt.subplots()函数。-
fig, ax = plt.subplots() -
fig是 Figure 对象,ax是 Axes 对象 (一个子图)。 -
对于多子图:
fig, axs = plt.subplots(nrows, ncols),此时axs是一个 Axes 对象的 NumPy 数组。
-
-
调用 Axes 方法绘图: 调用 Axes 对象的绘图方法,而不是
plt.函数。-
ax.plot(x, y)绘制折线图。 -
ax.scatter(x, y)绘制散点图。
-
4. 常用基本图表
所有这些绘图方法都应通过 Axes 对象 (ax.) 调用:
| 图表类型 | Axes 方法 | 描述 |
|---|---|---|
| 折线图 | ax.plot(x, y) |
随时间变化或连续数据的趋势展示。 |
| 散点图 | ax.scatter(x, y) |
展示两个变量之间的关系或数据点的分布。 |
| 柱状图 | ax.bar(x, height) |
比较不同类别之间的数据。 |
| 直方图 | ax.hist(data, bins) |
展示单个数值变量的频率分布。 |
| 箱线图 | ax.boxplot(data) |
展示数据的五数概括(中位数、四分位数、异常值)。 |
5. 样式定制 (Customization)
通过设置 Axes 对象的方法来美化和注释图表:
-
设置标签和标题:
-
ax.set_title('图表标题') -
ax.set_xlabel('X 轴标签') -
ax.set_ylabel('Y 轴标签')
-
-
添加图例:
ax.legend(['数据系列1', '数据系列2']) -
设置刻度范围:
ax.set_xlim(min_val, max_val),ax.set_ylim(min_val, max_val) -
添加网格线:
ax.grid(True)
复杂布局与进阶操作
6. 多子图 (Subplots)
使用 plt.subplots() 是创建多子图布局最简单且最推荐的方法。
-
创建 2 行 1 列:
fig, (ax1, ax2) = plt.subplots(2, 1)ax1和ax2是独立的 Axes 对象,可以分别在其上绘图。
-
共享轴: 在创建子图时可以指定共享 X 或 Y 轴。
plt.subplots(2, 1, sharex=True)
7. 保存图形
使用 Figure 对象的方法将图形保存到文件:
-
fig.savefig('my_plot.png', dpi=300)-
dpi参数控制图片的分辨率。 -
支持多种格式:
.png,.jpg,.pdf,.svg等。
-
8. 颜色、标记与线型 (Colormaps, Markers, Linestyles)
Matplotlib 提供了丰富的参数来控制图形的视觉样式:
-
颜色 (Color): 可以在绘图方法中使用
color参数指定颜色名称(如'r'代表红色,'b'代表蓝色)或十六进制代码。 -
线型 (Linestyle): 使用
linestyle或简写ls参数(如'-'实线,'--'虚线)。 -
标记 (Marker): 使用
marker参数指定数据点的形状(如'o'圆圈,'^'三角形)。
示例:
ax.plot(x, y, color='green', linestyle='--', marker='o')
笔记整理与常用速查表
| 主题 | 常用函数/方法 | 描述 | 接口 |
|---|---|---|---|
| 核心结构 | plt.figure(), plt.subplots() |
创建画布 Figure 和 Axes(子图/坐标系) | OO |
| 绘图基础 | ax.plot(), ax.scatter(), ax.bar(), ax.hist() |
在 Axes 上绘制各种基本图表 | OO |
| 标签定制 | ax.set_title(), ax.set_xlabel(), ax.legend() |
添加标题、轴标签、图例 | OO |
| 多图布局 | plt.subplots(R, C) |
创建 R 行 C 列的多子图布局 | OO |
| 图形保存 | fig.savefig(filename, dpi) |
将 Figure 对象保存为图像文件 | OO |
| 快捷绘图 | plt.plot(), plt.show() |
快速生成和显示图形 | Pyplot |