matplotlib中的Pyplot API和面向对象 API
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( )