当前位置: 首页 > news >正文

Python-matplotlib中的Pyplot API和面向对象 API

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 pltplt.plot([1, 2, 3])
ax = plt.gca()  # 获取当前Axes
ax.set_title('Title')  # 使用面向对象API修改属性
plt.show()

在这里插入图片描述

差别举例

import matplotlib.pyplot as pltplt.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 pltfig, (ax1, ax2) = plt.subplots(1, 2)  # 创建包含两个Axes的Figure
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()  # 注意:布局方法作用于Figure
plt.show()
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/226915.html

相关文章:

  • SolidWorks建模(U盘)- 多实体建模拆图案例
  • STM32:CAN总线精髓:特性、电路、帧格式与波形分析详解
  • CppCon 2014 学习:Decomposing a Problem for Parallel Execution
  • Docker 安装 Redis 容器
  • 如何使用flask做任务调度
  • 机器学习算法:逻辑回归
  • 分布式锁优化:使用Lua脚本保证释放锁的原子性问题
  • 单元测试-断言常见注解
  • MCP还是A2A?AI未来技术选型深度对比分析报告
  • 解决:install via Git URL失败的问题
  • 电路图识图基础知识-高、低压供配电系统电气系统的继电自动装置(十三)
  • 【华为云Astro Zero】组装设备管理页面开发(图形拖拽 + 脚本绑定)
  • 使用 MCP 将代理连接到 Elasticsearch 并对索引进行查询
  • Kotlin 扩展函数详解
  • 【iOS(swift)笔记-14】App版本不升级时本地数据库sqlite更新逻辑二
  • 【数据分析】第四章 pandas简介(1)
  • 基于STM32的循迹避障小车的Proteus仿真设计
  • 《棒球万事通》棒球特长生升学方向·棒球1号位
  • 探秘集成学习:从基础概念到实战应用
  • 神经网络与深度学习(第一章)
  • 树莓派4B串口通讯
  • 【JAVA后端入门基础001】Tomcat 是什么?通俗易懂讲清楚!
  • ISBN书号查询接口如何用PHP实现调用?
  • 使用new操作符动态分配
  • 【Spring】RAG 知识库基础
  • Python库CloudScraper详细使用(绕过 Cloudflare 的反机器人页面的 Python 模块)
  • CSS之动画(奔跑的熊、两面反转盒子、3D导航栏、旋转木马)
  • Java Script函数
  • 知识图谱系列(5):表示学习
  • 前端八股之Vue