matplotlib中的Pyplot API和面向对象 API
- 🍅 Pyplot API(状态机模式)和面向对象 API 是两种不同的编程接口.
- 🍅 它们的核心区别在于状态管理方式和代码组织风格。
Pyplot API(状态机模式)
- 🍉 Pyplot 维护一个 “当前图表” 和 “当前轴” 的全局状态。
- 🍉 每次调用plt.plot()、plt.title()等函数时,实际操作的是当前状态。
- 🍉 状态依赖执行顺序,容易混淆。
面向对象 API 详解
- 🍉 核心组件:
– Figure:顶级容器,包含所有图表元素。
– Axes:实际的绘图区域(一个 Figure 可包含多个 Axes)。
- 🍉 所有属性修改通过对象方法实现(如ax.set_xlim())。
- 🍉 优势:
– 清晰的层次结构,适合复杂图表。
– 多线程环境安全(每个线程可操作独立的 Axes)
二者差别
核心区别
特性 |
Pyplot API(状态机模式) |
面向对象 API |
状态管理 |
自动维护 “当前图表” 和 “当前轴”(全局状态) |
显式创建和管理Figure与Axes对象 |
调用方式 |
通过plt模块直接调用函数(如plt.plot()) |
通过对象方法调用(如ax.plot()) |
代码风格 |
命令式(类似 MATLAB) |
面向对象(更 Pythonic) |
多图 / 子图处理 |
需要依赖索引或手动切换当前轴 |
每个Axes独立操作,无需全局状态 |
灵活性 |
低(适合快速绘图) |
高(适合复杂图表定制) |
代码可读性 |
简单脚本更简洁 |
大型项目更清晰 |
方法命名差异
特性 |
Pyplot API(状态机模式) |
面向对象 API |
设置标题 |
plt.title(‘Title’) |
ax.set_title(‘Title’) |
设置 X 轴标签 |
plt.xlabel(‘X’) |
ax.set_xlabel(‘X’) |
设置 X 轴范围 |
plt.xlim(0, 10) |
ax.set_xlim(0, 10) |
设置线条颜色 |
plt.plot(…, color=‘red’) |
ax.plot(…, color=‘red’) |
注意事项
- 🍍 避免在同一代码中混用两种风格。
- 🍍 如果必须混用,优先通过plt.gca()获取当前 Axes 再调用对象方法。
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
ax = plt.gca()
ax.set_title('Title')
plt.show()

差别举例
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1)
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Subplot 1')
plt.subplot(1, 2, 2)
plt.plot([1, 2, 3], [6, 5, 4])
plt.title('Subplot 2')
plt.tight_layout()
plt.show()

import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Subplot 1')
ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Subplot 2')
fig.tight_layout()
plt.show()